我们目前使用 EqualityComparer<TKey>.Default
作为初始化通用字典的默认方式。但是,当字典的键是 int
类型时,它会在 Xamarin.iOS 上崩溃并出现以下错误(但在我尝试过的许多其他平台上都有效):
在链接 https://docs.microsoft.com/it-it/xamarin/ios/internals/limitations ,我找到了问题的原因(我想......):
问题
是否有内置的跨平台方式来创建默认的 IEqualityComparer<int>
?我试图避免制作这样的类(class)
private class Int32EqualityComparer : IEqualityComparer<int>
{
bool IEqualityComparer<int>.Equals(int x, int y)
{
return x.Equals(y);
}
int IEqualityComparer<int>.GetHashCode(int obj)
{
return obj.GetHashCode();
}
}
只是为了解决这个错误。
最佳答案
.NET Standard 中没有 IEqualityComparer<int>
的实现,您可以通过搜索 API reference 来确定。
如果您打算自己实现 IEqualityComparer<T>
,则可能值得使用 T
约束为 IEquatable<T>
的通用实现,以便您涵盖多种类型,而不仅仅是 int
。建议所有值类型按照 Framework design guidelines 实现 IEquatable<T>
。
关于c# - System.Int32 是否有内置的 IEqualityComparer<T>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50863871/