如果我在哪里将一个对象分配给另一个对象,并且它们有50%的可能性是相等的,那么检查相等是否有用?
我知道它在属性设置器中很有用,例如为了避免触发属性更改事件,但在下列情况下,它会有什么不同吗?
private SomeObject currentObject;
//assign only if objects are not equal
public void GetResults(SomeObject obj)
{
if(currentObject!= obj)
currentObject = obj;
//....
}
//assign no matter what
public void GetResults(SomeObject obj)
{
currentObject = obj;
//....
}
答案 0 :(得分:1)
唯一有用的是你要触发一些事件,比如实现INotifyPropertyChanged。否则,没有必要恕我直言。
答案 1 :(得分:1)
如果您正在考虑“微优化”,那么直接分配将表现得更好。
所以我坚持这个
currentObject = obj;
检查是否相等是为了比较它增加了另一个开销。它只是增加了一些要执行的IL代码。
一段时间后我做了一些基准测试,看看哪个更好,结果显示直接分配更好。现在我没有感兴趣的代码,人们可以尝试测量和弄清楚。
答案 2 :(得分:1)
这实际上取决于你如何定义对象的相等性:
如果您有一些自定义相等比较,例如如果某些(所有?)成员匹配,则两个对象相等,如果您想要对该对象有一个公共引用,则它取决于您的应用程序的逻辑,例如,这可能会节省一些内存。
否则,如果您只是感兴趣它是同一个对象,那就没有意义了 - 分配参考的成本可以忽略不计。