如何避免空引入.Equals()方法?谁能帮我吗? [英] How Can I Avoid Null Dereference Into .Equals() Method? Can Anyone Help Me Out?

查看:110
本文介绍了如何避免空引入.Equals()方法?谁能帮我吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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 [ ^ ]。



-SA


当另一个对象是 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: as System.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 using System.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, simple MyObject == 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 is null, it is obviously not equal to this 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆