繁体   English   中英

C#:为什么当我们不指定泛型时,泛型不使用它可以使用的最泛型类型?

[英]C#: Why don't generics use the most generic type it can when we don't specify one?

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

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(); }
    }
}

如果可以的话我会想要的

var comparer = FileSystemInfoComparers.FullName;

并具有IEqualityComparer<FileSystemInfo>的实例,因为我未指定任何类型,并且FileSystemInfo是T可以使用的最通用的类​​型。 在没有类型约束的情况下,默认类型例如可以是对象或某种东西。

也许不是最好的例子,但是反正只是在这里感到好奇:p

听起来像是困扰我的良方。

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

我宁愿保持简单。 (泛型已经足够复杂了,尤其是类型推断是很麻烦的。)

这是一个有趣的想法,它肯定可以工作,但是考虑到它仅在泛型类型参数受具体类型约束的情况下才有效。

.NET编译器非常擅长类型推断,但往往会避开任何假设。 除了只能在少数高度特定的实例中工作之外,我看不到其他任何原因无法完成。 由于它没有通用的目的,我可以想象微软将不太愿意进行更改以支持它。

您可以通过设置具有您要设置的默认类型的帮助器类来实现此目的。 但是,您目前要求的内容无法在C#3.0中完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM