首页 > TAG信息列表 > IEquatable
C#内建接口:IEquatable泛型
这节来讲一下泛型接口:IEquatable。 IEquatable泛型接口处于System.Runtime命名空间下,最早在.NET Framework 2.0中发布,只有泛型版本。像之前我们讲过的IComparable,IEnumerable接口,它们属于是1.0时期的内建接口,那时C#还没有泛型的概念,而2.0以后的版本,才有泛型的概念。通用List.Contains()中的值与引用相等
尝试#3简化此问题: 通用列表< T>可以包含任何类型-值或引用.当检查列表是否包含对象时,.Contains()使用默认的EqualityComparer< T>. T类型,并调用.Equals()(据我理解).如果未定义EqualityComparer,则默认比较器将调用.Equals().默认情况下,.Equals()调用.ReferenceEquals(),因此.Coobj1.Equals(obj2)和c#中的静态Object.Equals(obj1,obj2)有什么区别?
从Microsoft的文档中,两个Equals方法基本相同.但我偶然发现了一些非常奇怪的事情. 在我的Silverlight项目中,我有两个同一类的实例覆盖了Equals.如果我要求inst1.Equals(inst2)或inst2.Equals(inst1),我总是得到结果.但是Object.Equals(inst1,inst2)返回false.这怎么可能? 有任何想c# – 我的IEquatable仍在使用Object.GetHashcode for Dictionary []
我有类似下面的东西作为通用字典的关键. class IMyClass<T> : IEquatable<IMyClass> where T : struct { //etc } class MyClass<T> : IMyClass<T> where T : struct { public bool Equals(IRatingKey<T> other) { //etc } } 根据我对Equalic# – 重写GetHashCode()时使用Guid().GetHashCode()的缺点是什么
我发现GetHashCode()的实现看起来像这样 Guid _hashCode = Guid.NewGuid(); public override int GetHashCode() { return _hashCode.GetHashCode(); } 即使认为Equals看起来是正确的,说这个实现会导致许多关于.NET的假设破裂是否正确? public ovc# – 编译器选择错误的重载调用IEquatable.Equals
在性能敏感的程序中,我试图显式调用IEquatable< T> .Equals()而不是Object.Equals(以避免在我的情况下装箱).尽管我付出了最大努力,但编译器总是选择Object.Equals() – 我不明白.一个人为的例子: class Foo : IEquatable<Foo> { public bool Equals(Foo f) { Consc# – IEquatable的类实现,用作字典中的键
我有一个由两个字符串和一个枚举组成的类.我正在尝试将此类的实例用作字典中的键.不幸的是,我似乎没有正确实现IEquatable.这是我如何做到的: public enum CoinSide { Heads, Tails } public class CoinDetails : IComparable, IEquatable<CoinDetails> { private str