2016-08-02 7 views
3

次のステートメントはいずれも、オブジェクトxTであるかどうかをテストします。パフォーマンスに賢明に気づくべき違いはありますか?'result is T'と 'typeof(T).IsInstanceOfType(result)'の間には顕著な違いがありますか?

var result1 = x is T; 
var result2 = typeof(T).IsInstanceOfType(x); 

ありがとうございます!

+0

Ooops!打ち間違え。修正されました。特定の用途はありません。ただ好奇心の質問。 – MarqueIV

+1

これはなぜ投票されたのですか? – MarqueIV

答えて

4

IsInstanceOfTypeobjectを受け取るメソッドなので、値の種類はボックスになります。一方、オペレーターisは、ボクシングを実行しません。

Tがコンパイル時に特定の型またはジェネリック型のパラメータのいずれかとわかっている場合は、最初の方法を使用する方が効果的です。 2番目のアプローチは、最初のアプローチが適用されないため、コードが実行時に型を取得する場合です。

Type typeKnownAtRuntime = ... 
var result2 = typeKnownAtRuntime.IsInstanceOfType(x); // This works 
var incorrect = x is typeKnownAtRuntime; // This does not compile 
+1

[boxed](https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx)を意味します。なぜそれが悪いのかを明確にするために、それを詳しく説明したいかもしれません。 –

+0

'is'より' IsInstanceOfType'を使う理由はありますか?あなたはちょうどその逆のための素晴らしいケースを与えました、そして、今私はなぜ私が前者を使うのだろうと思っています。 – MarqueIV

+0

@MarqueIV私はこれについて言及する答えを編集しました。 – dasblinkenlight

関連する問題