2012-07-29 44 views
0

我寫這個方法投用逗號分隔的字符串轉換成它的類型的列表:通用演員CSV列出

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

但它拋出一個異常說「指定的強制轉換是無效的。」
我用長輸入測試過它。

+0

你的目標是什麼?你想讓程序讓我們說逗號分隔的整數列表嗎?你將要處理哪些輸入? – 2012-07-29 07:33:32

回答

7

你的代碼當然有效,如果T字符串(我測試了它)。

如果牛逼別的,說INT,你會得到這個例外。

這個作品

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

失敗

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

那是因爲人們不能投或轉換字符串INT,例如下面會失敗過:

int three = (int)"3"; 

的修復

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

因爲 「ABC」 不能轉換爲類型INT

此外,牛逼必須有某種類型的System.Convert()知道如何從一個字符串轉換。