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

M. *_*ley 8 c# generics

我有一个C#泛型:

public class Generic<TParameter> { ... }
Run Code Online (Sandbox Code Playgroud)

似乎我不能使用未绑定的类型作为类型参数.我error CS1031: Type expected尝试以下时得到:

var lGenericInstance = new Generic<List<>>();
Run Code Online (Sandbox Code Playgroud)

如何将未绑定类型用作泛型类型参数?有变通方法吗?我的泛型类只是使用反射,所以我可以获得所提供类型的成员列表作为字符串.


更新:我的答案是关于未绑定类型的问题,所以我已经跟进了一个单独的问题来解决我的具体问题.

jas*_*son 7

试试这个:

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);
Run Code Online (Sandbox Code Playgroud)

请注意,你不能写

Type boundFoo = typeof(Foo<Bar<>>)
Run Code Online (Sandbox Code Playgroud)

因为规范明确指出:

未绑定的泛型类型只能在typeof-expression(第7.6.11节)中使用.

(此处Bar<>不用作typeof-expression的参数,而是它是typeof-expression参数的泛型类型参数.)

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

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