メソッドは null 値で呼び出されますか、それとも null 参照例外が発生しますか?
MyObject myObject = null;
myObject.MyExtensionMethod(); // <-- is this a null reference exception?
この場合、「this」パラメータが null であるかどうかを確認する必要はまったくないのでしょうか?
ベストアンサー1
これは問題なく動作します (例外なし)。拡張メソッドは仮想呼び出しを使用しません (つまり、「callvirt」ではなく「call」il 命令を使用します)。そのため、拡張メソッドで自分で記述しない限り、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 チェックはありません。