15

is-operator の良い使い方は何ですか?

以下のキャスト用の構成は推奨される方法ではありません。実質的にすべてのドキュメントでは、null チェックを伴う as-operator が好まれます。

if(obj is SomeClass)
{
  SomeClass some = (SomeClass)obj;
  ....
}

確かに、これは (非常に小さな) パフォーマンスの向上であり、トレッドの安全性について言及している人もいます。そして、はい、これは本当です...

では、なぜ is 演算子があるのでしょうか?
「null チェックを使用する as-operator」はどこで機能しないか、または進むべき道ではありませんか?
is-operator を使用して得られる宣言の範囲を制限する利点はありますか?

4

1 に答える 1

11

asnull許容型では機能しませんstruct

object o = 123;
int i = o as int; // compile error

でも:

object o = 123;
if(o is int) {
    int i = (int)o;
    //...
}

もちろん、2.0以降では次のものも使用できます。

int? i = o as int?;

nullいつものようにテストします。

オブジェクトの値を気にしないというシナリオあります...オブジェクトが何であるかを知る必要があるだけです。

if(obj is Something)
    throw new InvalidOperationException("Seriously, don't do that");
// phew! dodged a bullet; we're ok here...

GetType()サブクラスやインターフェイスなどを手動で検討する必要がないため、これには適切ではないことに注意してください。

于 2012-11-29T09:32:56.317 に答える