如何避免空引入.Equals()方法?谁能帮我吗? [英] How Can I Avoid Null Dereference Into .Equals() Method? Can Anyone Help Me Out?
问题描述
NxtRecord record = obj as NxtRecord;
if(!this.m_record.Equals(record.m_record))
返回false;
else
返回true;
注意:m_record是类,record.m_record是struct,我使用的是VS2008
< blockquote>Null dereference是荒谬的。 Null没有被解除引用,它是null。
有一件事你需要理解:as System.Object.Equals
可以被覆盖( https://msdn.microsoft.com/ en-us / library / bsc2ak47%28v = vs.110%29.aspx [ ^ ]),将对象与null进行比较的一种非常可靠的方法是使用 System.Object.ReferenceEquals
:
https://msdn.microsoft.com/en-us/library/system.object.referenceequals%28v=vs.110%29.aspx [ ^ ]。
但是,当您为类型重新定义对象等效时,这通常是个问题需要在执行相等/同一时使用null与null进行比较(如果你不能这样做,你可以面对无限的递归),或者处理一种类型,它已经以某种不寻常的方式重新定义了相等性。在通常情况下,简单的 MyObject == null
比较工作正常。
参见: https://msdn.microsoft.com/en-US/library/ms173147%28v = vs.80%29.aspx [ ^ ]。
当另一个对象是null
时,它显然不等于这个
对象。因此,从
开始if (record == null )
返回 false ;
...并使其余更好阅读
else
返回 此 .m_record.Equals(record.m_record);
NxtRecord record = obj as NxtRecord;
if(!this.m_record.Equals(record.m_record))
return false;
else
return true;
Note : m_record is class and record.m_record is struct and I am using VS2008
"Null dereference" is absurd. Null is not dereferenced, it's null.
There is one thing you need to understand: asSystem.Object.Equals
can be overridden (https://msdn.microsoft.com/en-us/library/bsc2ak47%28v=vs.110%29.aspx[^]), a really reliable way to compare object with null is usingSystem.Object.ReferenceEquals
:
https://msdn.microsoft.com/en-us/library/system.object.referenceequals%28v=vs.110%29.aspx[^].
However, this is usually the issue when you redefine object equivalence for your type and need to use comparison with null in implementation of equality/identity (if you fail to do so, you can face unlimited recursion), or deal with a type which equality is already redefined on some unusual way. In an ordinary situation, simpleMyObject == null
comparison works just fine.
See also: https://msdn.microsoft.com/en-US/library/ms173147%28v=vs.80%29.aspx[^].
—SA
When the other object isnull
, it is obviously not equal tothis
object. Consequently, start with
if (record == null) return false;
... and make the rest better readable with
else return this.m_record.Equals(record.m_record);
这篇关于如何避免空引入.Equals()方法?谁能帮我吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!