2008-09-11 7 views
0

オブジェクトをテストする方法を知っています。オブジェクトがNOT型であることをテストする

if (foo is bar) 
{ 
    //do something here 
} 

が、どのようにあなたはそれが私が否定的な結果をテストするためにISと連携したキーワードを見つけることができないよう?「バー」されていないためにテストします。

はところで - 私はあなたにもas operatorを使用することができる具体的なキーワード

if (!(foo is bar)) ... 
if (foo.GetType() != bar.GetType()) .. // foo & bar should be on the same level of type hierarchy 
+1

これは良い質問です。試しても分かりませんが、それは明らかではありません。つまり、C#の構文チュートリアルでは、これらのすべてのことを綴り、自分ではまだ質問していないことを覚えておくとよいでしょう。 –

答えて

13
if (!(foo is bar)) { 
} 
1

を事前に謝罪ので、これは、サイコー明らかである恐ろしい感覚を持っています。

互換性のある型間の変換を実行するために、as演算子が使用されます( )。

bar aBar = foo as bar; // aBar is null if foo is not bar 
4

はありません...

+0

これは「不気味で奇妙な」ですか、言語機能を利用していますか? –

1

あなたは、オブジェクトが特定のタイプから正確特定のタイプまたは割り当て可能であることをテストするかどうかを明確にすべきです。たとえば:

public class Foo : Bar {} 

そして、あなたが持っているとします

if(!(foo.GetType() == tyepof(Bar))) {...} 

しかし、もし:

Foo foo = new Foo(); 

あなたはfooは(バーされていないかどうかを知りたい場合は)、あなたはこれを行うだろうfooがBarから派生していないことを確認したい場合、簡単なチェックはasキーワードを使用することです。

Bar bar = foo as Bar; 
if(bar == null) {/* foo is not a bar */} 
+0

私はbarのビットとしてfooが大好きです。なぜなら、barの場合はfooで何かしたいと思うからです。 –

関連する問題