2

重複の可能性:
C# の「as」キャストと従来のキャスト

私はいくつかのコードを継承しており、この Grid イベント ハンドラーが表示されます。これら 2 つのステートメントに違いがあるかどうかはわかりませんが、違いがあるとは思いませんが、コード内でそれらが背中合わせになっているという事実は、なぜ同じことを 2 つの方法で行うのか疑問に思います (それらが同じことをすると仮定すると)。もの)。もしあれば、誰かが違いを説明できますか?

            GridDataItem ParentItem = e.Item as GridDataItem;

            GridDataItem NewRow = (GridDataItem)e.Item;
4

7 に答える 7

6

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

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

続きを読む

于 2013-01-09T16:30:11.153 に答える
3

最初のもの:ParentItemは、タイプでないnull場合になります。e.ItemGridDataItem

e.Item2番目:タイプがない場合は、例外をスローしますGridDataItem

于 2013-01-09T16:30:02.630 に答える
2
//This will perform a safe conversion.  Null will be retuirned if e.Item is not
//a GridDataItem
GridDataItem ParentItem = e.Item as GridDataItem;

//This will throw an exception if e.Item is not a GridDataItem
GridDataItem NewRow = (GridDataItem)e.Item;

FAQ を参照してください 。 -operator.aspx

于 2013-01-09T16:32:10.197 に答える
2

これらは、 が ではないシナリオを処理する方法に応じて、にキャストe.Itemする2 つの異なる方法です。GridDataIteme.ItemGridDataItem

最初のケースでは、as:を使用すると常に結果が得られますが、 がe.Itemでない場合、GridDataItemその結果は になりますnull

2 番目のケースでは、明示的なキャストを使用しe.Itemます。が a でない場合、コードは(キャッチできます) をGridDataItemスローします。InvalidCastException

于 2013-01-09T16:33:51.563 に答える
1

最初の行は、型キャストが不可能な場合にParentItemがnullであることを確認します。2行目は例外をスローします

于 2013-01-09T16:30:07.493 に答える
1

明示的なキャストの代わりに「as」を使用しても、変換が失敗した場合に例外はスローされませんが、代わりにnullが返されます。

于 2013-01-09T16:30:38.243 に答える
0

e が GridDataItem の場合、違いはありません。そうでない場合: 「as」演算子は Null を返します 「不可能なキャッチ」は例外をスローします

したがって、違いは、誤った状況をどのように処理するかだけです。

于 2013-01-09T17:21:57.117 に答える