是否可以在C#中使用未绑定类型作为泛型类型参数?

是否可以在C#中使用未绑定类型作为泛型类型参数?,c#,generics,C#,Generics,我有一个C#generic: 如何使用未绑定类型作为泛型类型参数?有解决办法吗?我的泛型类只是使用反射,这样我就可以得到所提供类型的成员作为字符串的列表 更新:我关于未绑定类型的问题已经得到了回答,因此我用了一个解决我的具体问题的方法来跟进。我认为您提出的问题表述错误 代码中的错误是因为您不能在任何地方使用列表,因为它需要提供类型 这个:var lGenericInstance=new Generic()在列表上失败,而不是在常规上失败。。。好吧,因为他们都被锁链锁住了……:) 所以你的问题更

我有一个C#generic:

如何使用未绑定类型作为泛型类型参数?有解决办法吗?我的泛型类只是使用反射,这样我就可以得到所提供类型的成员作为字符串的列表



更新:我关于未绑定类型的问题已经得到了回答,因此我用了一个解决我的具体问题的方法来跟进。

我认为您提出的问题表述错误

代码中的错误是因为您不能在任何地方使用
列表
,因为它需要提供类型

这个:
var lGenericInstance=new Generic()
列表
上失败,而不是在
常规
上失败。。。好吧,因为他们都被锁链锁住了……:)

所以你的问题更像是:

为什么我不能创建类型为
List
的对象?或者为什么我不能为我的泛型类指定
List
作为t?

试试这个:

class Foo<T> { }
class Bar<T> { }

Type unboundBar = typeof(Bar<>);
Type unboundFoo = typeof(Foo<>);
Type boundFoo = unboundFoo.MakeGenericType(new[] { unboundBar });
Console.WriteLine(boundFoo.Name);
Conosle.WriteLine(boundFoo.GetGenericArguments().First().Name);
class Foo{}
类条{}
未绑定条类型=类型(条);
类型unboundFoo=类型of(Foo);
类型boundFoo=unboundFoo.MakeGenericType(新[]{unboundBar});
Console.WriteLine(boundFoo.Name);
WriteLine(boundFoo.GetGenericArguments().First().Name);
注意,你不能写

Type boundFoo = typeof(Foo<Bar<>>)
Type boundFoo=typeof(Foo)
因为规范明确规定:

未绑定的泛型类型只能在表达式类型中使用(§7.6.11)

Bar
在这里不是用作typeof表达式的参数,而是typeof表达式的参数的泛型类型参数。)

但是,正如上面使用反射所示,它在CLR中是完全合法的


但是你想做什么呢?你不能有未绑定类型的实例,所以我不明白。

你能更具体地说明你想要实现什么吗;一般来说,答案是否定的,在没有指定泛型的类型参数的情况下,不能实例化泛型。但也许有一个更好的办法来解决你的具体问题,那是不合法的。您(通常)可以使用未绑定的泛型的唯一位置是
typeof(List)
。您可以创建
新的泛型
(非泛型列表)。如果你没有提供一个类型,我想首先就不需要通用列表了。。。你能用这种方法创建他想要的东西(var lGenericInstance=new Generic();)吗?@Davide Piras:对于
包含genericparameters
true
@的类型,不可能有实例,因为注释者建议使用:
typeof(Foo)
。不,那是不可能的。是的,我意识到了。因此删除:)如果我想要一个开放的构造类型呢?假设一个
Foo
我想得到与
Foo
等价的值。这是否可能以类似的方式实现?
class Foo<T> { }
class Bar<T> { }

Type unboundBar = typeof(Bar<>);
Type unboundFoo = typeof(Foo<>);
Type boundFoo = unboundFoo.MakeGenericType(new[] { unboundBar });
Console.WriteLine(boundFoo.Name);
Conosle.WriteLine(boundFoo.GetGenericArguments().First().Name);
Type boundFoo = typeof(Foo<Bar<>>)