泛型可以嵌套在类定义中

时间:2010-01-21 12:39:24

标签: c# generics nested

我正在做这样的事情:

public abstract class FolderNode<TChildNode,TChildBusObj> : Node
    where TChildNode : MappedNode<TChildBusObj>, new()
    where TChildBusObj : new()
{
..
}

有没有办法从定义中省略TChildBusObj,但仍能在代码中访问它?例如。我希望能够推断泛型类型的泛型类型。我试过这个:

public abstract class FolderNode<TChildNode> : Node
    where TChildNode : MappedNode<TChildBusObj>, new()
{
..
}

但是我得到了这个编译错误:

CS0246:找不到类型或命名空间名称“TChildBusObj”(您是否缺少using指令或程序集引用?)

更新22/01

我实际上已经确定我想要这个:

public class Folder<TChildNode, TBusObj> : MappedNode<TBusObj[]>
    where TChildNode : MappedNode<TBusObj>, new()

最好缩短到这个:

public class Folder<MappedNode<TBusObj>, TBusObj> : MappedNode<TBusObj[]>

但我不能因为我收到这个错误:

CS0081:类型参数声明必须是标识符而不是类型

我猜你不能在类定义

中匿名嵌套泛型类型

4 个答案:

答案 0 :(得分:4)

如果你没有定义它所引用的内容,TChildBusObj会引用什么?

答案 1 :(得分:0)

可以在类名定义或方法名称定义中指定通用参数。

答案 2 :(得分:0)

嗯,问题是你没有说过TChildBusObj 编译后, TChildBusObj ,将根据需要使用,将成为参数。
在第二个实现中,没有声明 TChildBusObj 作为通用参数,所以它假设 TChildBusObj 是一个类型,并且你可能没有以此命名的类,它将抛出异常。
必须声明在类定义中使用的每个泛型参数,以便可以自由使用它。

答案 3 :(得分:0)

为什么不只是

 public class Folder<TBusObj> : MappedNode<TBusObj[]>
 {
     void Add(MappedNode<TBusObj> newChild) { ... }
 }