在将对象分配给另一个对象之前检查是否相等

时间:2013-11-08 11:19:04

标签: c#

如果我在哪里将一个对象分配给另一个对象,并且它们有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;
    //....
}

3 个答案:

答案 0 :(得分:1)

唯一有用的是你要触发一些事件,比如实现INotifyPropertyChanged。否则,没有必要恕我直言。

http://msdn.microsoft.com/en-us/library/ms743695.aspx

答案 1 :(得分:1)

如果您正在考虑“微优化”,那么直接分配将表现得更好。

所以我坚持这个

currentObject = obj;

检查是否相等是为了比较它增加了另一个开销。它只是增加了一些要执行的IL代码。

一段时间后我做了一些基准测试,看看哪个更好,结果显示直接分配更好。现在我没有感兴趣的代码,人们可以尝试测量和弄清楚。

答案 2 :(得分:1)

这实际上取决于你如何定义对象的相等性:

如果您有一些自定义相等比较,例如如果某些(所有?)成员匹配,则两个对象相等,如果您想要对该对象有一个公共引用,则它取决于您的应用程序的逻辑,例如,这可能会节省一些内存。

否则,如果您只是感兴趣它是同一个对象,那就没有意义了 - 分配参考的成本可以忽略不计。