2013-03-26 64 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

相关问题