![](/img/trans.png)
[英]Can I specify “or” with keyword “where” an Generic Type Parameters Constraints?
[英]Where are constraints on generic parameters in documentation?
一些泛型類對其泛型參數有限制。 例如,字典中的鍵應該使用where ...
子句實現一些接口(以進行比較...)。 我在哪里可以在https://docs.microsoft.com的文檔中找到這些約束?
比如我看到了字典所有接口的信息,但是沒有看到TKey
類型參數的約束信息。
為什么你認為鍵應該實現一個接口來進行比較?
Dictionary<TKey, TValue>
的文檔在任何地方都沒有說。 事實上,它清楚地說明了當 TKey 沒有實現 IEquatable 接口時會發生什么(重點是我的):
字典需要一個相等實現來確定鍵是否相等。
您可以使用接受比較器參數的構造函數來指定IEqualityComparer<T>
泛型接口的實現;
如果未指定實現,則使用默認的通用相等比較器EqualityComparer<T>.Default
。
如果類型TKey
實現System.IEquatable<T>
泛型接口,則默認相等比較器使用該實現。
事實是,.Net 框架中任何類型的實例都可以與相同類型的其他實例進行比較,無論它是否實現System.IEquatable<T>
或System.IComparable<T>
接口。 它只是由默認的 comparer 進行比較。
Dictionary 的TKey
參數沒有任何約束,Zohar 已經講了很多。
.Net Framework 中的大多數泛型參數都沒有約束,如果泛型參數有任何約束,那么您可以在其定義中看到where
子句,例如: https : //docs.microsoft.com/en-us/dotnet/api/system .io.unmanagedmemoryaccessor.read?view=network-4.7.2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.