我不认为这可以在C#中完成,但发布此内容只是为了确保。这是我的问题。我想在C#中做这样的事情:
var x = 10;
var l = new List<typeof(x)>();
或
var x = 10;
var t = typeof(x);
var l = new List<t>();
但当然这不起作用。虽然这不应该是一个问题,因为类型t在编译时被解析。我知道这可以通过反射来解决,但是在编译时使用反射知道类型会有点过分。
答案 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;