2016-11-07 3 views
0

Мне пришлось преобразовать строку в массив int сначала, разделив строку запятой, а затем преобразовать в массив int.cast <int> method in C# is not type casting

и следующая строка работает отлично

int[] array = input.Split(',').Select(obj=>Convert.ToInt32(obj)).ToArray(); 

, но я хотел сделать это по-другому, используя метод расширения Cast.

int[] array = input.Split(',').Cast<int>().ToArray(); 

, но с использованием расширения расширения он выбрасывает недействительное исключение операции литья.

Я даже применил методType() до того, как он был наложен, но на самом деле он не нужен, но все еще не работает.

int[] array = input.Split(',').OfType<string>().Cast<int>().ToArray(); 

Какая ошибка я здесь делаю.

Я использую метод литья соответствующим образом.

+0

@peter пожалуйста, прочитайте мой вопрос первый –

+0

Для 'Литой ()' метод работы, объект должен быть правильного типа уже. Метод 'Cast ()' только переинтерпретирует данные, он не делает никакого преобразования. См. Отмеченный дубликат для правильных методов в C# для синтаксического анализа строки как 'int'. –

+0

@PeterDuniho, поэтому он не набирает литые, то почему он называется cast –

ответ

1

Вы должны использовать int.Parse для преобразования string в int. В C# строка равна , но не может быть отлита непосредственно в целое число.

input.Split(',').Select(int.Parse).ToArray() 
+0

Каков метод броска ошибок, конечно, у меня уже есть рабочий запрос.Почему я не могу использовать метод литья –

0

Вы также можете использовать следующий метод.

int[] array = Array.ConvertAll(input.Split(','), int.Parse); 
+0

Конечно, я могу ответить на вопрос, что не так с методом Cast –

+0

@YogeshJoshi 'Cast ' не будет работать в вашем случае. 'Cast ' - расширенный метод интерфейса IEnumerable, а тип вашего строкового массива - 'IEnumerable '. например, если вы перечислили массив для перечисления с помощью метода AsEnumerable, вы увидите, что тип массива будет 'System.Collections.Generic.IEnumerable ' – Shell