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