文档中对通用参数的约束在哪里?

时间:2019-04-14 05:43:12

标签: c#

某些通用类对其通用参数有约束。例如,字典中的键应使用where ...子句实现一些接口(以便与之比较...)。在https://docs.microsoft.com的文档中哪里可以找到这些约束?

例如,我看到有关字典所有接口的信息,但没有有关TKey类型参数约束的信息。

2 个答案:

答案 0 :(得分:2)

为什么您认为键应该实现可比较的接口?

Dictionary<TKey, TValue>的文档在任何地方都没有提到。 实际上,它清楚地说明了当TKey不实现IEquatable接口(强调我的)时会发生什么:

  

字典需要一个相等的实现来确定键是否相等。
  您可以通过使用接受比较器参数的构造函数来指定IEqualityComparer<T>通用接口的实现;
  如果您未指定实现,则使用默认的通用相等比较器EqualityComparer<T>.Default
  如果类型TKey实现了System.IEquatable<T>通用接口,则默认的相等比较器将使用该实现。

事实是,可以将.Net框架中任何类型的实例与相同类型的其他实例进行比较,无论它是否实现了System.IEquatable<T>System.IComparable<T>接口。 default comparer正在比较它。

答案 1 :(得分:2)

字典的g = lattice([10, 5]) x = g.new_vp("double", arange(g.num_vertices()) % 10) y = g.new_vp("double", arange(g.num_vertices()) // 10) pos = group_vector_property([x,y]) graph_draw(g, pos, output="lattice.png") 参数没有限制,Zohar对此进行了很多讨论。

.Net Framework中的大多数通用参数没有约束,如果通用参数有任何约束,则可以在其定义中看到TKey子句,例如:https://docs.microsoft.com/en-us/dotnet/api/system.io.unmanagedmemoryaccessor.read?view=netframework-4.7.2