1

我想实现在 an 中放入随机数的效果,IList似乎我无法想到如何获取 的类型IList,无论是 anint还是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);
    }
}
4

1 回答 1

2

从语法上讲,您想要的是:

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

但是,Console.ReadLine 返回一个字符串,所以这种转换(以及泛型的使用)没有意义。要么你应该使用 a IList<string>(因为你认为T是一个字符串),要么你应该使用IList<int>(因为你正在将ints 添加到列表中)。在任何情况下,您都不清楚您要完成什么,因为您对strRead.

更新,每条评论

当然,您可以将字符串转换为任意类型。该框架为此提供了一些实用程序,例如Convert类:

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

这适用于简单类型——例如,您可以使用Convert将 a 转换为stringa int。但是,不言而喻,您不能使用此类将任意字符串转换为任意类型。为此,您将不得不考虑您自己的类型转换框架,也许将 , 的行为Convert与隐式和显式转换等结合起来。这是因为很明显,特定类型的字符串表示完全取决于该类型的特征.

于 2013-03-26T23:09:04.267 回答