内部泛型类型与外部编译器警告相同

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>.这种类型会让你的生活变得悲惨.(我说的是个人经历)

如果你想使用外部TNode,你不应该让Node通用.

通常,将一个泛型类型嵌套在不同类型中的原因很少.