0

重複の可能性:
直接キャスト vs 'as' 演算子?

コードのスニペットの実際の違いを教えてくれる人はいますか?

var unknown = (object)new List<string>();

// Snippet 1: as operator
foreach (var item in unknown as IList<int>) {
 // Do something with item
}


// Snippet 2: cast operator
foreach (var item in (IList<int>)unknown) {
 // Do something with item
}
4

2 に答える 2

2

演算子はエラーを発生させませんが、キャストは次のエラーを発生させますInvalidCastException

MSDNから

as 演算子は、例外を発生させる代わりに、変換の失敗時に null を生成することを除いて、キャストに似ています。

expression as type

次と同等です。

expression is type ? (type)expression : (type)null

ただし、式は 1 回だけ評価されます。

as 演算子は、参照変換とボックス化変換のみを実行することに注意してください。as 演算子は、代わりにキャスト式を使用して実行する必要がある、ユーザー定義の変換などの他の変換を実行できません。

于 2012-09-29T09:42:30.523 に答える
0

as 演算子の使用は、次の 3 つの重要な点で C# のキャストとは異なります。

  1. 変換しようとしている変数が要求された型でない場合、またはその継承チェーンにない場合は、例外をスローする代わりに null を返します。

  2. 参照型に変換する参照型変数にのみ適用できます。

  3. as を使用すると、キャスト構文で実行される暗黙的または明示的な変換演算子などのユーザー定義の変換は実行されません。

参考にしたブログ

于 2012-09-29T09:49:12.947 に答える