[解決済み] ダイレクトキャスト vs 'as'演算子?
2022-03-20 03:35:17
質問
次のコードを考えてください。
void Handler(object o, EventArgs e)
{
// I swear o is a string
string s = (string)o; // 1
//-OR-
string s = o as string; // 2
// -OR-
string s = o.ToString(); // 3
}
3種類のキャスティングの違いは何ですか(いいですか、3番目はキャスティングではありませんが、意図は伝わりますよね)。どれが優先されるべきでしょうか?
どのように解決するのですか?
string s = (string)o; // 1
スロー
無効キャスト例外(InvalidCastException
もし
o
が
string
. そうでない場合は
o
を
s
であっても
o
は
null
.
string s = o as string; // 2
を割り当てる。
null
を
s
もし
o
は
string
または
o
は
null
. このため、値型に対して使用することはできません(演算子は決して
null
となります。) そうでなければ,代入
o
を
s
.
string s = o.ToString(); // 3
を発生させます。
NullReferenceException
もし
o
は
null
. を割り当てます。
o.ToString()
を返します。
s
がどのようなものであっても
o
があります。
ほとんどの変換に1を使用します。シンプルでわかりやすいからです。型が正しくない場合、通常は例外が発生することを想定しているので、2はほとんど使わない傾向にあります。このreturn-nullタイプの機能の必要性は、エラーコードを使うようなひどい設計のライブラリでしか見たことがありません(例:例外を使う代わりにreturn null = error)。
3はキャストではなく、単なるメソッド呼び出しです。文字列でないオブジェクトの文字列表現が必要な場合に使用します。
関連
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] IEnumerable<T> と IQueryable<T> を比較する。
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] C#で文字を繰り返し表示する最適な方法
-
[解決済み] int.Parse()とConvert.ToInt32の主な違いは何ですか?
-
[解決済み] reinterpret_castはいつ使うのか?
-
[解決済み] CLRのキャストと'as'キーワードの使用について
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】C#で四捨五入する方法
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である