繁体   English   中英

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

[英]Is it possible to use an unbound type as a generic type parameter in C#?

我有一个C#泛型:

public class Generic<TParameter> { ... }

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

var lGenericInstance = new Generic<List<>>();

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


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

尝试这个:

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<>>)

因为规范明确指出:

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

Bar<>不被使用作为参数来将typeof表达这里,更确切地说,它是一种一般类型参数的参数到typeof运算表达式 。)

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

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

你提出的问题在我看来是错误的。

您在代码中出现的错误是因为您无法在任何地方使用List<> ,因为它需要提供类型。

这一个: var lGenericInstance = new Generic<List<>>(); List上失败,而不是在Generic ......两者都很好,因为它们被链接... :)

所以你的问题更像是:

为什么我不能创建List<>类型的对象? 或者为什么我不能将List<>指定为我的泛型类的T?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM