2012-07-29 3 views
0

Я написал этот метод, чтобы бросить разделенные запятые строки в список его типа:Generic Cast CSV в список

public List<T> GetListFromString<T>(string commaSplited) 
{ 
    return commaSplited.Split(',').Cast<T>().ToList(); 
} 

Но он бросает исключение, говоря "Указанный бросок не является действительным.
Я проверил его с длинным вводом.

+0

И какова ваша цель? Вы хотите, чтобы процесс мог разрешить список целых чисел, разделенных запятыми? Какими ресурсами вы собираетесь справиться? –

ответ

7

Ваш код, безусловно, работает, если Tстрока (я ее протестировал).

Если T является что-то еще, скажем Int, вы получите это исключение.

Это Работает

List<string> result = GetListFromString<string>("abc, 123, hij"); 

Это не удается

List<int> resultInt = GetListFromString<int>("23, 123, 2"); 

Это потому, что один не может бросить или преобразовать строку в INT, например, следующий потерпит неудачу тоже:

int three = (int)"3"; 

The Fix

public List<T> GetListFromString<T>(string commaSplited) 
    { 
     return (from e in commaSplited.Split(',') 
       select (T)Convert.ChangeType(e, typeof(T))).ToList(); 
    } 

Однако все заданные строк должна быть конвертируемым к Т, например, следующий будут по-прежнему не:

List<int> resultIntFail = GetListFromString<int>("23, abc, 2"); 

, потому что «а» не могут быть преобразованы в типа INT.

Кроме того, T должен быть какой-то тип, который System.Convert() знает, как преобразовать из строки.

Смежные вопросы