2013-03-26 73 views
1

我想達到投入的隨機數在IList的影響,似乎我無法想到如何獲得IList的類型,無論是intdecimal,等我不能簡單地把Console.ReadLine()到類型的IList如何轉換爲IList類型?

public void RandomizeIList<T>(IList<T> list) 
{ 
    randomNum = new Random(); 
    T typeRead = 0, typeReadSeed = 0; 
    String strRead = "", strReadSeed = ""; 
    Console.WriteLine("How many {0}s do you want to randomly generate?", list.GetType()); 
    T strRead = (list.GetType())Console.ReadLine(); 
    Console.WriteLine("What's the limit of the randomly generated {0}s?", list.GetType()); 
    Int32.TryParse(strReadSeed, out intReadSeed); 
    for (int i = 0; i < strRead; i++) 
    { 
     list[i] = randomNum.Next(intReadSeed); 
    } 
} 
+2

你有困難,因爲這首先不是泛型的好用法。採用T的通用方法應該能夠取*任何可能的T *。字符串,對象,長頸鹿,一碗水果,不管。 – 2013-03-26 23:08:48

+0

請注意'list [i] = randomNum.Next(intReadSeed);'在這裏是錯誤的,在很多情況下會崩潰。你應該使用'list.Add(randomNum.Next(intReadSeed));' – joce 2013-03-27 01:58:15

回答

2

語法上你想要的是:

T strRead = (T)Console.ReadLine(); 

然而,Console.ReadLine只有返回一個字符串,所以這個投(和使用泛型)是沒有意義的。或者你應該使用IList<string>(因爲你認爲T是一個字符串),或者你應該使用IList<int>(因爲你正在將ints添加到列表中)。無論如何,你很難完成什麼,因爲你對strRead什麼都不做。

更新,根據註釋

當然,你可以將字符串轉換爲任意類型。該框架提供了一些工具,用於此,如Convert類:

T strRead = (T)(object)Convert.ChangeType(Console.ReadLine(), typeof(T)); 

這將簡單的工種 - 您可以使用Convertstring轉換爲int,例如。但是,不用說,您不能使用此類將任何任意字符串轉換爲任意類型。爲此,您將不得不考慮自己的類型轉換框架,可能將Convert的行爲與隱式和顯式轉換等相結合。這是因爲很明顯,特定類型的字符串表示完全取決於該類型的特性類型。

+0

我想將用戶輸入字符串(在本例中爲「Console.ReadLine()」)轉換爲列表可以處理的數據類型。 – 2013-03-27 01:22:01

+0

請看我更新的答案。 – 2013-03-27 01:32:35

+0

非常感謝! – 2013-03-27 01:33:35

相關問題