我正在做这样的事情:
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:类型参数声明必须是标识符而不是类型
我猜你不能在类定义
中匿名嵌套泛型类型答案 0 :(得分:4)
如果你没有定义它所引用的内容,TChildBusObj
会引用什么?
答案 1 :(得分:0)
可以在类名定义或方法名称定义中指定通用参数。
答案 2 :(得分:0)
嗯,问题是你没有说过TChildBusObj
编译后, TChildBusObj ,将根据需要使用,将成为参数。
在第二个实现中,没有声明 TChildBusObj 作为通用参数,所以它假设 TChildBusObj 是一个类型,并且你可能没有以此命名的类,它将抛出异常。
必须声明在类定义中使用的每个泛型参数,以便可以自由使用它。
答案 3 :(得分:0)
为什么不只是
public class Folder<TBusObj> : MappedNode<TBusObj[]>
{
void Add(MappedNode<TBusObj> newChild) { ... }
}