相关疑难解决方法(0)

什么是比较参考类型的两个实例的"最佳实践"?

我最近遇到过这种情况,到目前为止,我一直在愉快地重写等于运算符(==)和/或Equals方法,以查看两个引用类型是否实际包含相同的数据(即两个看起来相同的不同实例).

我一直在使用它,因为我已经进行了更多的自动化测试(比较参考/预期数据与返回的数据).

在查看MSDN中的一些编码标准指南时,我遇到了一篇建议反对它的文章.现在我理解为什么文章说这个(因为它们不是同一个实例)但它没有回答这个问题:

  1. 比较两种参考类型的最佳方法是什么?
  2. 我们应该实施IComparable吗?(我还看到提到这应该仅为值类型保留).
  3. 有一些我不知道的界面吗?
  4. 我们应该自己动手吗?!

非常感谢^ _ ^

更新

看起来我错误地阅读了一些文档(这是漫长的一天)并且压倒Equals可能是要走的路.

如果要实现引用类型,则应考虑在引用类型上覆盖Equals方法(如果类型看起来像基本类型,如Point,String,BigNumber等).大多数引用类型不应重载等于运算符,即使它们重写等于.但是,如果要实现旨在具有值语义的引用类型(例如复数类型),则应覆盖相等运算符.

.net c# comparison equality operator-overloading

45
推荐指数
3
解决办法
3万
查看次数

使用自定义类作为键时,"给定键不存在于字典中"错误

我有这样的代码:

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)

这似乎对我来说几乎是不合理的......

c#

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

.net ×1

comparison ×1

equality ×1

operator-overloading ×1