2009-04-28 1 views
18

Учитывая строку ниже:Это лучший способ в C# преобразовать строку с разделителями в массив int?

string str = "1,2,3"; 

Будет ли это быть лучшим расширения для преобразования его в качестве int массива?

static class StringExtensions 
{ 
    public static int[] ToIntArray(this string s) 
    { 
     return ToIntArray(s, ','); 
    } 
    public static int[] ToIntArray(this string s, char separator) 
    { 
     string[] ar = s.Split(separator); 
     List<int> ints = new List<int>(); 
     foreach (var item in ar) 
     { 
      int v; 
      if (int.TryParse(item, out v)) 
       ints.Add(v); 
     } 
     return ints.ToArray(); 
    } 
} 

ответ

40

это действительно зависит от того, что вы хотите делать с нецелыми строками. В настоящий момент вы тихо их бросаете. Лично я бы хотел, чтобы он ошибся. Это также позволяет использовать более лаконична:

public static int[] ToIntArray(this string value, char separator) 
{ 
    return Array.ConvertAll(value.Split(separator), s=>int.Parse(s)); 
} 
9

Этот подход очень лаконичен, и бросить (не очень информативно) FormatException, если разбить строка содержит значение, которые не могут быть разобраны как INT:

int[] ints = str.Split(',').Select(s => int.Parse(s)).ToArray(); 

Если вы только хочу молча ронять без ИНТА значения, которые вы можете попробовать это:

private static int? AsNullableInt(string s) 
{ 
    int? asNullableInt = null; 

    int asInt; 

    if (int.TryParse(s, out asInt)) 
    { 
     asNullableInt = asInt; 
    } 

    return asNullableInt; 
} 

// Example usage... 
int[] ints = str.Split(',') 
    .Select(s => AsNullableInt(s)) 
    .Where(s => s.HasValue) 
    .Select(s => s.Value) 
    .ToArray(); 
0

Это выглядит нормально, я бы также сгенерирует исключение, если один из элементов не могут быть преобразованы вместо молча терпят неудачу.

5

Это взорвется, если один из ваших элементов в списке не разобрать, как INT, который, вероятно, лучше, чем молча неудачу:

public static int[] ToIntArray(this string value, char separator) 
{ 
    return value.Split(separator).Select(i => int.Parse(i)).ToArray(); 
} 
Смежные вопросы