使用嵌套在泛型类中的类作为C#中的类型参数

时间:2016-04-14 08:24:11

标签: c# generics inner-classes type-parameter

具有以下定义:

public class Generic<T>
{
    public class Nested { }
}

鉴于ECMAref§25.1声明:

  

嵌套在泛型类声明或泛型中的任何类   struct declaration(第25.2节)本身就是一个泛型类声明,   因为应提供包含类型的类型参数   创建一个构造类型。

我理解Nested需要type参数才能实例化。

我可以使用Type获取通用typeof

var type = typeof(Generic<>.Nested); 
// type.FullName: Namespace.Generic`1+Nested

有什么方法可以将它用作泛型方法的类型参数,如下所示?

var tmp = Enumerable.Empty<Generic<>.Nested>(); 
// Error: Unexpected use of an unbound generic

如前所述,根据ECMA规范,我了解在实例化之前必须满足所有类型参数,但这里没有创建任何对象。此外,Nested类没有以任何方式使用类型参数:我只是想为代码组织目的而嵌套它。

2 个答案:

答案 0 :(得分:3)

不,你不能这样做。如你所说

  

在实例化之前必须满足所有类型参数

虽然实际上没有生成Generic<>.Nested的实例

  • 编译器不知道Empty的语义(所以不知道没有创建Generic<>.Nested的实例)
  • 主要问题:您想要创建IEnumerabe<Generic<>.Nested>的实例,该实例将是&#34;不满意的类型类型参数&#34;

答案 1 :(得分:0)

我认为你的主要目标可能只是通过将子类放在同一名称空间中的父类旁边来实现。

命名空间实际上应该按照您在帖子中的评论中所讨论的方式组织代码。

你应该只将一个类定义为一个子类,只有父类将使用它。