C#:当我们没有指定泛型时,为什么泛型不能使用最通用的类​​型?

Svi*_*ish 0 c# generics

例如,我现在创建了一个这个小类:

public static class FileSystemInfoComparers<T> where T : FileSystemInfo
{
    public static IEqualityComparer<T> FullName
    {
        get { return new FullNameComparer(); }
    }

    private class FullNameComparer : IEqualityComparer<T>
    {
        public bool Equals(T x, T y)  { return x.FullName == y.FullName;   }
        public int GetHashCode(T obj) { return obj.FullName.GetHashCode(); }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我能这样做,我想要它

var comparer = FileSystemInfoComparers.FullName;
Run Code Online (Sandbox Code Playgroud)

并且有一个实例IEqualityComparer<FileSystemInfo>,因为我没有指定任何类型和FileSystemInfo是最通用的类​​型T可以.没有类型约束,默认类型可以是例如对象或其他东西.

也许不是最好的例子,但无论如何只是在这里好奇:p

Jon*_*eet 10

听起来像是给我带来麻烦的食谱.

特别是,您可以轻松地创建一个FileSystemInfoComparers使用相同名称的静态属性调用的非泛型类,突然您的代码意味着完全不同的东西.

我宁愿保持简单.(泛型已经很复杂了,特别是类型推断非常多毛.)