我希望实现在IList
中添加随机数的效果,似乎我无法考虑如何获取IList
的类型,无论是int
或decimal
等。我不能简单地将Console.ReadLine()
转换为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);
}
}
答案 0 :(得分:2)
从语法上讲你想要的是:
T strRead = (T)Console.ReadLine();
但是,只有Console.ReadLine
会返回一个字符串,所以这个演员(以及泛型的使用)没有任何意义。您应该使用IList<string>
(因为您认为T
是字符串),或者您应该使用IList<int>
(因为您要将int
添加到列表中)。无论如何,由于你对strRead
没有采取任何行动,因此你不清楚自己要完成什么。
根据评论更新:
当然,您可以将字符串转换为任意类型。该框架为此提供了一些实用程序,例如Convert
类:
T strRead = (T)(object)Convert.ChangeType(Console.ReadLine(), typeof(T));
这适用于简单类型 - 例如,您可以使用Convert
将string
转换为int
。但是,不言而喻,您不能使用此类将任意字符串转换为任意类型。为此,您必须考虑自己的类型转换框架,可能将Convert
的行为与隐式和显式转换等结合起来。这是因为它清楚了特定类型的字符串表示形式完全取决于该类型的特征。