某些通用类对其通用参数有约束。例如,字典中的键应使用where ...
子句实现一些接口(以便与之比较...)。在https://docs.microsoft.com的文档中哪里可以找到这些约束?
例如,我看到有关字典所有接口的信息,但没有有关TKey
类型参数约束的信息。
答案 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