2016-01-14 5 views
0

Я хочу создать кучу объектов Vector4, а значения для экземпляра будут очищены из файла конфигурации, который хранится в списке строк.Как создать новые объекты Vector4, когда значения для экземпляра находятся в строках?

Значение строк, как «255, 0, 0 255» или «0, 0 255, 255» и т.д.

Учитывая, что я в цикле Еогеасп и я о том, чтобы создать эти объекты Vector4, как бы я разобрать эти строки таким образом, что я могу извлечь из каждого отдельного целое и использовать его для создания экземпляра, например:

Vector4 v1 = new Vector4(255, 0, 0 255); 
Vector4 v2 = new Vector4(0, 0, 255, 255); 

Имейте в виду, я хочу сделать это автоматический процесс, следовательно, почему У меня есть файл конфигурации, который включает все значения Vector.

ответ

0

Мне понравилось решение Grant Winney, но оно не будет обрабатывать все требования к форматированию, запрошенные Стивеном Ченом. Разделитель должен быть также пространством.

Кроме того, мне нравится, чтобы эти вещи были обернуты в метод расширения :). Итак, здесь немного улучшена версия с некоторыми тестами для неправильного формата, вызывающего исключения.

public static class StringVector4Extensions 
{ 
    public static Vector4 ToVector4(this string str, params string[] delimiters) 
    { 
     if (str == null) throw new ArgumentNullException("string is null"); 
     if (string.IsNullOrEmpty(str)) throw new FormatException("string is empty"); 
     if (string.IsNullOrWhiteSpace(str)) throw new FormatException("string is just white space"); 

     if (delimiters == null) throw new ArgumentNullException("delimiters are null"); 
     if (delimiters.Length <= 0) throw new InvalidOperationException("missing delimiters"); 

     var rslt = str 
     .Split(delimiters, StringSplitOptions.RemoveEmptyEntries) 
     .Select(float.Parse) 
     .ToArray() 
     ; 

     if (rslt.Length != 4) 
     throw new FormatException( "The input string does not follow"  + 
            "the required format for the string." + 
            "There has to be four floats inside" + 
            "the string delimited by one of the" + 
            "requested delimiters. input string: " + 
            str         ); 
     return new Vector4(rslt[0], rslt[1], rslt[2], rslt[3]); 
    } 
} 

Использование затем легко:

var a = "255, 0, 0 255".ToVector4(",", " "); 
    var b = "0, 0 255, 255".ToVector4(",", " "); 
1

Разделите строку, проанализируйте отдельные цифры и передайте их конструктору.

string input = "255, 0, 0, 255"; 

var nums = input.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries) 
       .Select(float.Parse) 
       .ToList(); 

Vector4 v1 = new Vector4(nums[0], nums[1], nums[2], nums[3]);