0

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

3 回答 3

1

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

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

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

于 2013-11-08T11:23:45.770 回答
1

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

所以我会坚持这个

currentObject = obj;

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

前段时间我做了一些基准测试,看看哪个更好,结果表明直接分配更好。现在我没有代码感兴趣的人可以尝试测量和计算。

于 2013-11-08T11:23:23.970 回答
1

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

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

于 2013-11-08T11:21:55.583 回答