相关疑难解决方法(0)

覆盖==运算符.如何比较null?

可能重复:
如何在没有无限递归的情况下检查'=='运算符重载中的空值?

对此可能有一个简单的答案......但它似乎在逃避我.这是一个简化的例子:

public class Person
{
   public string SocialSecurityNumber;
   public string FirstName;
   public string LastName;
}
Run Code Online (Sandbox Code Playgroud)

让我们说,对于这个特定的应用程序,如果社会安全号码匹配,并且两个名称都匹配,那么我们指的是同一个"人"是有效的.

public override bool Equals(object Obj)
{
    Person other = (Person)Obj;
    return (this.SocialSecurityNumber == other.SocialSecurityNumber &&
        this.FirstName == other.FirstName &&
        this.LastName == other.LastName);
}
Run Code Online (Sandbox Code Playgroud)

为了保持一致,我们还为团队中不使用该.Equals方法的开发人员覆盖==和!=运算符.

public static bool operator !=(Person person1, Person person2)
{
    return ! person1.Equals(person2);
}

public static bool operator ==(Person person1, Person person2)
{
    return person1.Equals(person2);
}
Run Code Online (Sandbox Code Playgroud)

好又花花公子,对吧?

但是,当Person对象发生时会发生什么null

你不能写:

if (person == null)
{
    //fail! …
Run Code Online (Sandbox Code Playgroud)

.net c# null overloading operator-keyword

132
推荐指数
4
解决办法
6万
查看次数

如何在没有无限递归的'=='运算符重载中检查空值?

以下将导致==运算符重载方法的无限递归

    Foo foo1 = null;
    Foo foo2 = new Foo();
    Assert.IsFalse(foo1 == foo2);

    public static bool operator ==(Foo foo1, Foo foo2) {
        if (foo1 == null) return foo2 == null;
        return foo1.Equals(foo2);
    }
Run Code Online (Sandbox Code Playgroud)

我如何检查空值?

.net c# operator-overloading

110
推荐指数
4
解决办法
6846
查看次数

C#.Equals(),. ReferenceEquals()和==运算符

我对这三个的理解是:

  • .Equals()测试数据平等(缺乏更好的描述)..Equals()可以为同一对象的不同实例返回True,这是最常被覆盖的方法.

  • .ReferenceEquals() 测试两个对象是否是同一个实例,并且不能被覆盖.

  • ==ReferenceEquals()默认情况下与此相同,但可以覆盖此项.

C#站说:

在对象类中,EqualsReferenceEquals方法在语义上是等效的,除了ReferenceEquals它只在对象实例上有效.该 ReferenceEquals方法是静态的.

现在我没理解.任何人都可以对此有所了解吗?

c# equality

76
推荐指数
3
解决办法
5万
查看次数