2015-11-03 3 views
0

У меня есть строковый массив, который должен быть определен пользователем, и мне нужно преобразовать массив строк в короткий массив, чтобы я мог использовать значения для вычислений. Мне нужно использовать массив, потому что мне нужно будет позже ссылаться на все значения. Это то, что у меня есть:Преобразование строкового массива в короткий массив

string [] calIntake = new string[3]; 
calIntake [0] = Console.ReadLine(); 
calIntake[1] = Console.ReadLine(); 
calIntake[2] = Console.ReadLine(); 

Я пробовал:

short[] calIntakeNum = Array.ConvertAll(calIntake.split(','), Short.Parse); 

Я получаю сообщение об ошибке с этим, что говорит: «Аргументы типа для метода«System.Array.ConvertAll (TInput [] , System.Converter)»не может быть выведено из эксплуатации Попробуйте указать аргументы типа явно

Тогда я попробовал:..

short[] calIntakeNum = Array.ConvertAll(calIntake.split(','), ne Converter<string, short>(Short.Parse)); 

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

+0

Это ваш точный код? 'string []' не имеет метода 'split'. –

+0

Не могли бы вы пояснить, что вы ожидаете от 'calIntake.split (',')' делать? Также почему вы пытаетесь использовать такой странный код, когда статья, которую вы предположительно читаете, показывает очень простой код [Array.ConvertAll] (https://msdn.microsoft.com/en-us/library/exc45z53 (v = vs.110) .aspx)? –

ответ

2

Вы можете просто проецировать строки с помощью метода short.Parse:

short[] calIntakeNum = calIntake.Select(short.Parse).ToArray(); 
+0

Это правильно, хотя он не должен использовать массивы вообще ни для чего. Если его инструктор хочет массивы, его инструктор должен искать работу в Макдональдсе. –

+0

list.Add (item) не будет разбиваться, потому что индекс выходит за пределы диапазона. Массивы подходят при статической инициализации (как должно было быть OP). В противном случае общий список более надежный и поддерживаемый. Я знаю, что есть школа мысли, которая защищает, всегда записывая худший код, с которым вы можете уйти. Я не фанат. Как долго вы профессионально пишете код? –

+0

Я знаю, что вы не понимаете. Я сказал «общий список», чтобы отличить его от System.Collections.List, который также называется List и который не является общим. [Массивы не являются дженериками] (http://stackoverflow.com/a/15561100/424129). Ваш недостаток опыта имеет много общего с тем фактом, что вы не знаете, почему контейнер с фиксированным размером может быть проблемой. Что делать, если позже OP необходимо вставить другой элемент в индекс 1? Он должен добавить новую строку кода и изменить три других. Массив - это больше работы для написания, гораздо больше работы для изменения, и как писать, так и изменять, более подвержены ошибкам. Несколько вызовов list.Add() предпочтительны. –

1

calIntake уже массив, вам не нужно Split его. Там нет типа Short в C#, есть short или Int16

short[] calIntakeNum = Array.ConvertAll(calIntake, short.Parse); 
0

Второй метод, который вы пробовали не удалось, потому что вы пробовали вызова метода класса, который не существует, а потому, что Short.Parse не существует. Удаление .split(',') из первого параметра ConvertAll и изменение Short.Parse к short.Parse будет решить проблему:

short[] calIntakeNum = Array.ConvertAll(calIntake, new Converter<string, short>(short.Parse)); 

Если это возможно для вашей программы, вы можете объявить массив, как short[] первоначально, и называют short.Parse на Console.ReadLine():

short[] shortArray = new short[3]; 
shortArray[0] = short.Parse(Console.ReadLine()); 
Смежные вопросы