我最近遇到过这种情况,到目前为止,我一直在愉快地重写等于运算符(==)和/或Equals方法,以查看两个引用类型是否实际包含相同的数据(即两个看起来相同的不同实例).
我一直在使用它,因为我已经进行了更多的自动化测试(比较参考/预期数据与返回的数据).
在查看MSDN中的一些编码标准指南时,我遇到了一篇建议反对它的文章.现在我理解为什么文章说这个(因为它们不是同一个实例)但它没有回答这个问题:
非常感谢^ _ ^
看起来我错误地阅读了一些文档(这是漫长的一天)并且压倒Equals可能是要走的路.
如果要实现引用类型,则应考虑在引用类型上覆盖Equals方法(如果类型看起来像基本类型,如Point,String,BigNumber等).大多数引用类型不应重载等于运算符,即使它们重写等于.但是,如果要实现旨在具有值语义的引用类型(例如复数类型),则应覆盖相等运算符.
我有这样的代码:
if (CounterForEachRelatedTagDict.Select(x => x.Key).Contains(tag.Key))
CounterForEachRelatedTagDict[tag.Key] += tag.Value;
Run Code Online (Sandbox Code Playgroud)
是否有可能IF语句返回true,同时CounterForEachRelatedTagDict[tag.Key]返回"给定的键不存在于字典中"错误?tag是一个KeyValuePair<MyClass,int>.
CounterForEachRelatedTagDict 像这样发起:
Dictionary<MyClass, int> CounterForEachRelatedTagDict = new Dictionary<MyType, int>();
Run Code Online (Sandbox Code Playgroud)
MyClass 是这样的
public class MyClass
{
public string name {get;set;}
public Guid Id { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
这似乎对我来说几乎是不合理的......