重複の可能性:
C# の「as」キャストと従来のキャスト
これら2つの表現の違いは何ですか?
(ListView)sendersender as ListView
一般的に、私は通常exp sender as ListViewを使用しました。しかし、SOでは、ほとんどの場合、ユーザーが(ListView)sender.
では、どちらがより効率的かを知りたいのです。
または、
それがコーダーの選択である場合、どちらを使用するか[両方とも同じように機能します]??
重複の可能性:
C# の「as」キャストと従来のキャスト
これら2つの表現の違いは何ですか?
(ListView)sendersender as ListView一般的に、私は通常exp sender as ListViewを使用しました。しかし、SOでは、ほとんどの場合、ユーザーが(ListView)sender.
では、どちらがより効率的かを知りたいのです。
または、
それがコーダーの選択である場合、どちらを使用するか[両方とも同じように機能します]??
違いは、送信者が ListView でない場合、(ListView)sender は例外をスローしますが、ListView としての送信者は例外をスローせず、キャストが無効な場合は代わりに null を返します。
違いは、何らかの理由で送信者が ListView にキャストできない場合(ListView)sender、例外がスローsender as ListViewされ、結果が null になることです。
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
sender as ListViewと同じです:
sender is ListView ? (ListView)sender : null
効率に実質的な違いはありません。as例外をスローする代わりにnullの結果を生成するため、無効なキャストに対して安全です。そのため、私は常にasnull条件を使用してチェックします。
as演算子は失敗しても例外をスローしませんが、代わりに左側の変数を null で埋めます。
(ListView)sender送信者が ListView でない場合、Whileは例外をスローします。
Usingは、が代入可能でないか変換できない(a)b場合に例外をスローし、が null 非許容型 ( など) の場合でも使用できます。Usingは例外をスローすることはありません (に代入できない場合は戻ります) が、変換は行われません (たとえば、 を実行できますが は実行できません)。baaintb as anullba(int?)12.312.3 as int?a12 as int?12 as int