我如何转换为IList类型?

时间:2013-03-26 23:03:37

标签: c#

我希望实现在IList中添加随机数的效果,似乎我无法考虑如何获取IList的类型,无论是intdecimal等。我不能简单地将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);
    }
}

1 个答案:

答案 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));

这适用于简单类型 - 例如,您可以使用Convertstring转换为int。但是,不言而喻,您不能使用此类将任意字符串转换为任意类型。为此,您必须考虑自己的类型转换框架,可能将Convert的行为与隐式和显式转换等结合起来。这是因为它清楚了特定类型的字符串表示形式完全取决于该类型的特征。