4

this.value1c.value1両方ともnullまたは非nullのいずれかになります。したがって、合計4つの組み合わせをテストします。value2nullまたは非nullにすることもできます。

以下のif-then-elseは、三項演算子を使用する(if then else演算子を使用する? :)などの短いものに置き換えることができますか?との4つの組み合わせをテストしているため、この特定のケースでは悪い習慣にvalue1なりvalue2ますか?

     public override bool Equals(object obj)
     {
        bool value1_check = false;
        bool value2_check = false;
        var c = obj as ObjectType;

        if (this.value1 != null)
               value1_check = this.value1.Equals(c.value1);
        else if ((this.value1 == null) && (c.value1 == null))
               value1_check = true;
        else if ((this.value1 == null) && (c.value1 != null))
              value1_check = c.value1.Equals(this.value1);

        if (this.value2 != null)
               value2_check = this.value2.Equals(c.value2);
        else if ((this.value2 == null) && (c.value2 == null))
               value2_check = true;
        else if ((this.value2 == null) && (c.value2 != null))
              value2_check = c.value2.Equals(this.value2);

        return (value1_check && value2_check);
     }
4

3 に答える 3

8

を呼び出すことができますObject.Equals()。これはすでにすべてを実行しています。

return Equals(this.Value1, c.Value1)
    && Equals(this.Value2, c.Value2);
于 2012-05-15T15:53:45.343 に答える
4

実際には、あなたは??が欲しいかもしれません オペレーター

var lhs= this.value1 ?? c.value1 ?? null;
var rhs = c.value1 ?? this.value1 ?? null;
var value1Check = lhs == rhs

あなたと同じことをする必要がありますが、ほぼ100%読みにくくなります!

于 2012-05-15T15:57:43.453 に答える
0

あなたがまだ三元オプションについて疑問に思っているなら。

 value1_check= this.value1!=null? this.value1.Equals(c.value1):(c.value1!=null?c.value.Equals(this.value):value1_check=true);
于 2014-06-10T17:14:00.527 に答える