1

インターフェイスAと、そのインターフェイスを実装するクラスの変数「x」があるとします。これで、これらを実行できます。

var a = (A) x;

または:

var a = x as A;

InvalidCastException失敗した場合、最初のステートメントは an をスローし、2 番目のステートメントは を返すことを知っていnullます。しかし、他に違いはありますか?特にパフォーマンス?

4

3 に答える 3

2

そう(A)xすることで、間違いなくキャストしようとするキャストを行っています。キャストできない場合は、例外が発生します。

使用asすると、キャストまたは be になりますnull

ただし、これを自分で試すために必要なすべてのサンプル コードがあるので、あなたが述べたコードが何をするのかを私たちに尋ねる前に、これを試すことができます。

于 2013-02-20T14:21:09.493 に答える
1

最初のものはすぐに変換を試み、2 番目のものは実際に x が型 A であるかどうかをチェックします。

于 2013-02-20T14:21:24.733 に答える
1

as 演算子はキャスト操作に似ています。ただし、変換が不可能な場合、as は例外を発生させる代わりに null を返します。

as 演算子を使用して、互換性のある参照型または null 許容型の間で特定の型の変換を実行できます。

次の例を検討してください。

expression as type

このコードは、expression 変数が 1 回だけ評価されることを除いて、次の式と同等です。

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

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

参照: as (C# リファレンス)

于 2013-02-20T14:22:47.510 に答える