インターフェイスA
と、そのインターフェイスを実装するクラスの変数「x」があるとします。これで、これらを実行できます。
var a = (A) x;
または:
var a = x as A;
InvalidCastException
失敗した場合、最初のステートメントは an をスローし、2 番目のステートメントは を返すことを知っていnull
ます。しかし、他に違いはありますか?特にパフォーマンス?
そう(A)x
することで、間違いなくキャストしようとするキャストを行っています。キャストできない場合は、例外が発生します。
使用as
すると、キャストまたは be になりますnull
。
ただし、これを自分で試すために必要なすべてのサンプル コードがあるので、あなたが述べたコードが何をするのかを私たちに尋ねる前に、これを試すことができます。
最初のものはすぐに変換を試み、2 番目のものは実際に x が型 A であるかどうかをチェックします。
as 演算子はキャスト操作に似ています。ただし、変換が不可能な場合、as は例外を発生させる代わりに null を返します。
as 演算子を使用して、互換性のある参照型または null 許容型の間で特定の型の変換を実行できます。
次の例を検討してください。
expression as type
このコードは、expression 変数が 1 回だけ評価されることを除いて、次の式と同等です。
expression is type ? (type)expression : (type)null
as 演算子は、参照変換、null 許容変換、およびボックス化変換のみを実行することに注意してください。as 演算子は、代わりにキャスト式を使用して実行する必要がある、ユーザー定義の変換などの他の変換を実行できません。
参照: as (C# リファレンス)