簡體   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