Intereting Posts
Принуждение элемента управления NumericUpDown принимать только два TextBoxДля вспомогательных смесей день и месяц в датах TypeInitializationException, выброшенное aleagpu Издевательское итеративное поведение C # Левая сторона задания должна быть переменной, свойством или индексом DataGridView загружается очень медленно. Как оптимизировать добавление строк в DataGridView? Регулярное выражение для анализа URI данных изображения Способ записи TcpClient гарантирует, что данные доставляются на сервер? Сравнение XmlDocument для равенства (контент-мудрый) Лучший способ автоматизации сайта? Есть ли лучший способ подождать очереди в очереди? Почему .gif изображение показывает только некоторые первые кадры (Windows Phone) Как имитировать удерживаемые клавиши с помощью VB.NET или C #? Как конвертировать дату, указанную в формате CCYYMMDD, в MM / DD / CCYY с помощью C #? Выделение выражения LINQ вызывает «Внутренняя ошибка поставщика данных .NET Framework 1025.»

Это лучший способ в 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 ints = new List(); foreach (var item in ar) { int v; if (int.TryParse(item, out v)) ints.Add(v); } return ints.ToArray(); } } 

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

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

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

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

Если вы хотите просто отказаться от любых значений, отличных от int, вы можете попробовать следующее:

 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(); 

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

 public static int[] ToIntArray(this string value, char separator) { return value.Split(separator).Select(i => int.Parse(i)).ToArray(); } 

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