Dar*_*man 4 c# generics warnings inner-classes
所以我有一个树类:
public class Tree<T> : IEnumerable where T : IComparable<T>
{
private Node<T> root = null;
...
private class Node<T> : IEnumerable<T> where T : IComparable<T>
{
private Node<T> left, right;
...
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我得到编译器警告:Type parameter 'T' has the same name as the type parameter from outer type 'Tree<T>' 嗯,当然它是相同的名称,它们应该是相同的类型.(事实上,由于Node该类是私有的,因此永远不能在Tree类之外访问,所以它们保证是相同的类型.这个编译器警告只是BS我可以放心地忽略吗?或者是否有一些很好的理由我应该给内部类一个不同的通用名称(除了让警告消失)?
(我看到了这个问题,这是关于警告本身,但这显然是一个不同的场景.类型保证是相同的,因为Node只有在上下文中创建和访问Tree,所以没有混淆的机会. )
SLa*_*aks 10
您误解了嵌套类型参数.
编译器警告你有关构造的类型Tree<int>.Node<string>.这种类型会让你的生活变得悲惨.(我说的是个人经历)
如果你想使用外部T的Node,你不应该让Node通用.
通常,将一个泛型类型嵌套在不同类型中的原因很少.