我们目前使用 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/

10-11 18:24