2012-02-07 19 views
7

documentation for the keyword "is"状態:キーワードとEqualsメソッドのオーバーライド「が」

ザオペレータでのみ基準変換、ボクシング コンバージョン、およびアンボクシング変換を考慮する。 ユーザー定義コンバージョンなどの他のコンバージョンは考慮されません。

実際にはどういう意味ですか? 構造体が特定の型であるかどうかをチェックするのは間違っていますか?例えば 、

public struct Point2D 
{ 
    public int X; 
    public int Y; 

    ... 

    public override bool Equals(Object value) 
    { 
     if (value != null && value is Point2D) // or if (value != null && GetType() == value.GetType()) 
     { 
      Point2D right = (Point2D)value; 
      return (X == right.X && Y == right.Y); 
     } 
     else return false; 
    } 

    ... 
} 
+1

値が不正です.GetType()== typeof(Point2D)はリファクタリングの事故からあなたを守ります。 –

+1

[this](http://stackoverflow.com/questions/983030/type-checking-typeof-gettype-or-is)の理由はありますか? – enzom83

+0

@enzom83それは正しいです。あなたがPoint2Dから継承することを気にしていて、子供が同じロジックを持つようにしたいのであれば(デフォルトでは)、 'is'がこのケースに適しています – McKay

答えて

6

する構造体は、特定のタイプは、微細であるか否かをチェックします。ドキュメントは、ユーザー定義のexplicitimplicitの変換演算子は、指定されたオブジェクトが指定された型かどうかを検討するときに、たとえその型に変換できるユーザー定義演算子があっても評価されないことを意味します。

関連する問題