1

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

これら2つの表現の違いは何ですか?

  • (ListView)sender
  • sender as ListView

一般的に、私は通常exp sender as ListViewを使用しました。しかし、SOでは、ほとんどの場合、ユーザーが(ListView)sender.

では、どちらがより効率的かを知りたいのです。

または、

それがコーダーの選択である場合、どちらを使用するか[両方とも同じように機能します]??

4

6 に答える 6

11

違いは、送信者が ListView でない場合、(ListView)sender は例外をスローしますが、ListView としての送信者は例外をスローせず、キャストが無効な場合は代わりに null を返します。

于 2012-05-23T04:57:50.547 に答える
5

違いは、何らかの理由で送信者が ListView にキャストできない場合(ListView)sender、例外がスローsender as ListViewされ、結果が null になることです。

于 2012-05-23T04:58:03.200 に答える
2
var listview = (ListView)sender  // Throws an exception if sender is not listView

var listview = sender as ListView  // listview will be assigned to null if sender is not
                                   // a listview
于 2012-05-23T05:01:40.993 に答える
0

sender as ListViewと同じです:

sender is ListView ? (ListView)sender : null

効率に実質的な違いはありません。as例外をスローする代わりにnullの結果を生成するため、無効なキャストに対して安全です。そのため、私は常にasnull条件を使用してチェックします。

于 2012-05-23T05:26:03.623 に答える
0

as演算子は失敗しても例外をスローしませんが、代わりに左側の変数を null で埋めます。

(ListView)sender送信者が ListView でない場合、Whileは例外をスローします。

于 2012-05-23T04:55:59.467 に答える
0

Usingは、が代入可能でないか変換できない(a)b場合に例外をスローし、が null 非許容型 ( など) の場合でも使用できます。Usingは例外をスローすることはありません (に代入できない場合は戻ります) が、変換は行われません (たとえば、 を実行できますが は実行できません)。baaintb as anullba(int?)12.312.3 as int?a12 as int?12 as int

于 2012-05-23T05:04:04.897 に答える