- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有自定义比较器的类型字典(字典),因为我们要存储2个给定类型之间的关系(对于MVVM模式),并且我需要帮助以寻求一种使自定义EqualityComparer正常工作的方法。
做一些研究,我发现GetHashCode方法在Equals方法之前被调用,我如何正确获得哈希码?预期的行为是,如果我尝试从字典中获取“Square”,并且它具有“GeometricShape”已经存在,它返回“GeometricShape”的值,我找不到以给定预期结果的方式对其进行哈希处理的方法
public class DictionaryComparer : EqualityComparer<Type>
{
public override bool Equals(Type x, Type y)
{
return x.IsAssignableFromType(y);
}
public override int GetHashCode(Type obj)
{
return obj.GetHashCode();
}
}
最佳答案
您不能使用将“assignable from”用作等效操作的比较器。Equals
具有依赖于它的类所假定的特定规则。如果违反了规则,使用这种比较器的结果本质上将是随机混洗。
参见Guidelines for Overloading Equals()
x.Equals(x)
returns true.
x.Equals(y)
returns the same value asy.Equals(x)
if(x.Equals(y) && y.Equals(z))
returns true, thenx.Equals(z)
returns true.
Dictionary<Type,Type>
并将类型直接放入其中即可。
关于c# - EqualityComparer <Type> GetHashCode和等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40730997/
我有一个 Person 类,并创建了一个派生自 EqualityComparer 的相等比较器类。然而默认的 EqualityComparer 不调用我的相等比较器的 Equals 函数 根据 MSD
我想比较两个嵌套对象列表。如果父对象 Id 不同和/或任何子对象 Id 或 Baz 属性不同,我想认为它们已更改。 我已经在下面实现了我自己版本的 Equals 和 GetHashCode,但是尽管使
阅读 C++ 模板第二版的第 22 章,我试图理解 EqualityComparable 特性的实现。但我无法理解编译器如何决定是否激活回退。 除此之外还有两个只声明了程序编译运行的函数。这对我来说很
我见过的例子: int[] a1 = { 1, 2, 3 }; int[] b1 = { 1, 2, 3 }; a1.Equals(b1) //false a1.Equals(b1,Equal
谁能给我解释一下下面的类声明有什么问题: private class PriorityQueueEntry : IComparer> where TPriori
假设有这个类: public class Foo { public int Id { get; set; } public int? NullableId { get; set; }
我有一个带有自定义比较器的类型字典(字典),因为我们要存储2个给定类型之间的关系(对于MVVM模式),并且我需要帮助以寻求一种使自定义EqualityComparer正常工作的方法。 做一些研究,我发
我们的代码库目前有以下 EqualityComparer。 public static IEnumerable Exclude(this IEnumerable first,
我需要使用 EqualityComparer 初始化静态 dictionary,因为我使用自定义类作为此 dictionary 中的键。当这个 dictionary 不是静态的时,我可以初始化它,但是
我读过这个post但它没有回答我的问题。 MSDN says : We recommend that you derive from the EqualityComparer(Of T) class
对于具有属性 A、B、C、D、StartDate 和 EndDate 的对象,如果我想实现任何两个对象相等的东西,如果它们具有相同的 A、B 和 C 以及重叠的日期范围,那将如何完成? 我试过像这样创
为什么这个简单的测试会失败? var dict1 = new Dictionary {{1, 15}}; var dict2 = new Dictionary {{1, 15}}; var eq
我希望使用指定的 EqualityComparer 创建的 HashSet 在 Remove 操作中使用该比较器。特别是因为 Contains 操作返回 true! 这是我使用的代码: public
我有一个类Person , 它实现了 IEquatable 中的 Equals() 方法(也覆盖了 Object.Equals 方法,让我们暂时忽略 GetHashcode() 方法) class P
我正在阅读 EqualityComparer.Default 的源代码并发现它并没有那么聪明。这是一个例子: enum MyEnum : int { A, B } EqualityComparer.D
考虑 T = 字符串。 我很好奇它是否使用类似这样的东西:typeof(EqualityComparer).GetInterface("IEqualityComparer"); 任何建议.. 最佳答案
除了 .NET Framework 中的错误之外,还有其他解释吗? EqualityComparer.Default.Equals()方法是说以下网址是相等的! http://books.google
我的问题会有一个 bool 值答案:是或否。不管是哪一个,有人能解释一下下面的代码是如何被 GNU-g++ 4.9.2 和 clang 3.5 编译的,而 GNU-g++ 5.1.1 不再接受它,声称
我正在尝试使用显式键类型对某些对象执行 Linq GroupBy。我没有通过 IEqualityComparer到 GroupBy,所以根据文档: The default equality compa
来自 MSDN The SequenceEqual(IEnumerable, IEnumerable) method enumerates the two source sequences in pa
我是一名优秀的程序员,十分优秀!