[解決済み】C#で、Nullオブジェクトに対して拡張メソッドを呼び出すとどうなるか?
2022-03-25 18:15:05
質問
メソッドはNULL値で呼び出されるのか、それともNULL参照例外を発生させるのか?
MyObject myObject = null;
myObject.MyExtensionMethod(); // <-- is this a null reference exception?
この場合、「this」パラメータがNULLであるかどうかをチェックする必要はないのでしょうか?
どのように解決するのですか?
それで問題なく動作します(例外はありません)。拡張メソッドは仮想コールを使わないので(つまり "call" il 命令を使うのであって "callvirt" は使わない)、拡張メソッドの中に自分で書かない限り null チェックがありません。これは実際にいくつかのケースで役に立ちます。
public static bool IsNullOrEmpty(this string value)
{
return string.IsNullOrEmpty(value);
}
public static void ThrowIfNull<T>(this T obj, string parameterName)
where T : class
{
if(obj == null) throw new ArgumentNullException(parameterName);
}
その他
基本的に、静的コールの呼び出しは非常にリテラルなものです。
string s = ...
if(s.IsNullOrEmpty()) {...}
になります。
string s = ...
if(YourExtensionClass.IsNullOrEmpty(s)) {...}
ここで、明らかにNULLチェックはありません。
関連
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] C#でメソッドをパラメータとして渡す
-
[解決済み] Distinct() with lambda?
-
[解決済み] C#でジェネリックメソッドからNULLを返すにはどうしたらいいですか?
-
[解決済み] 既存の静的クラスに拡張メソッドを追加することはできますか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み] IEnumerableがヌルまたは空であるかどうかを確認するには?