![](/img/trans.png)
[英]Why C# don't accept constructor requirements with parameters on generics?
[英]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.