C# 对象不为 null 但 (myObject != null) 仍然返回 false

C# object is not null but (myObject != null) still return false(C# 对象不为 null 但 (myObject != null) 仍然返回 false)
本文介绍了C# 对象不为 null 但 (myObject != null) 仍然返回 false的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我需要在对象和 NULL 之间进行比较.当对象不是 NULL 时,我用一些数据填充它.

I need to do a comparaison between an object and NULL. When the object is not NULL I fill it with some data.

代码如下:

 if (region != null)
 {
  ....
 }

这是有效的,但有时在循环和循环时,区域对象不为空(我可以在调试模式下看到其中的数据).在调试时的逐步调试中,它不会进入 IF 语句......当我使用以下表达式进行快速观察时:我看到 (region == null) 返回 false, AND (region != null) 也返回 false...为什么以及如何?

This is working but when looping and looping sometime the region object is NOT null (I can see data inside it in debug mode). In step-by-step when debugging, it doesn't go inside the IF statement... When I do a Quick Watch with these following expression : I see the (region == null) return false, AND (region != null) return false too... why and how?

更新

有人指出对象是 == 和 != 重载:

Someone point out that the object was == and != overloaded:

    public static bool operator ==(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }

        return (r1.Cmr.CompareTo(r2.Cmr) == 0 && r1.Id == r2.Id);
    }


    public static bool operator !=(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }
        return (r1.Cmr.CompareTo(r2.Cmr) != 0 || r1.Id != r2.Id);
    }

推荐答案

== 和/或 != 运算符是否为区域对象的类重载?

Is the == and/or != operator overloaded for the region object's class?

既然您已经发布了重载的代码:

Now that you've posted the code for the overloads:

重载应该如下所示(代码取自 Jon Skeet 和 菲利普·里克):

The overloads should probably look like the following (code taken from postings made by Jon Skeet and Philip Rieck):

public static bool operator ==(Region r1, Region r2)
{
    if (object.ReferenceEquals( r1, r2)) {
        // handles if both are null as well as object identity
        return true;
    }

    if ((object)r1 == null || (object)r2 == null)
    {
       return false;
    }        

    return (r1.Cmr.CompareTo(r2.Cmr) == 0 && r1.Id == r2.Id);
}

public static bool operator !=(Region r1, Region r2)
{
    return !(r1 == r2);
}

这篇关于C# 对象不为 null 但 (myObject != null) 仍然返回 false的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

ActiveDirectory error 0x8000500c when traversing properties(遍历属性时 ActiveDirectory 错误 0x8000500c)
search by samaccountname with wildcards(使用通配符按 samaccountname 搜索)
Get the list of Groups for the given UserPrincipal(获取给定 UserPrincipal 的组列表)
Can you find an Active Directory User#39;s Primary Group in C#?(你能在 C# 中找到 Active Directory 用户的主要组吗?)
Query From LDAP for User Groups(从 LDAP 查询用户组)
How can I get DOMAINUSER from an AD DirectoryEntry?(如何从 AD DirectoryEntry 获取 DOMAINUSER?)