C#中带有类型参数的泛型类型

时间:2009-08-31 17:51:13

标签: c# generics type-inference

我不认为这可以在C#中完成,但发布此内容只是为了确保。这是我的问题。我想在C#中做这样的事情:

var x = 10;
var l = new List<typeof(x)>();

var x = 10;
var t = typeof(x);
var l = new List<t>();

但当然这不起作用。虽然这不应该是一个问题,因为类型t在编译时被解析。我知道这可以通过反射来解决,但是在编译时使用反射知道类型会有点过分。

4 个答案:

答案 0 :(得分:41)

public static List<T> CreateCompatibleList<T> (T t)
{
    return new List<T> () ;
}

var x = 10 ;
var l = CreateCompatibleList (x) ;

答案 1 :(得分:6)

您正试图让.Net使用运行时运算符设置泛型类型。如你所知,那是行不通的。泛型类型必须在编译时设置。

答案 2 :(得分:3)

在C#中定义泛型是这样做的:

var someList = new List<int>();

你可以定义这样的泛型:

var x = 1;
var someType = typeof(x);
var someList = new List<someType>();

因为在这种情况下你是在运行时指定类型,而不是编译时间。 C#不支持。

答案 3 :(得分:2)

你无法完全按照自己的要求去做,但只需稍加思考就可以完成同样的事情

Type genericType = typeof(List<>);
Type[] type = new Type[] { typeof(int) };
Type instanceType = genericType.MakeGenericType(type);
object instance = Activator.CreateInstance(instanceType );
var l = (List<int>)instance;