静的メソッドString.IsNullOrEmpty
は、.NET Framework バージョン 2.0 で導入されました。拡張メソッドは、LINQ と共に .NET Framework バージョン 3.5 で導入されました。したがって、Microsoft には、導入時にこのオプションがありませんでしたIsNullOrEmpty
。
もちろん、IsNullOrEmpty
を のインスタンス メソッドにすることはできません。String
これは、 である参照に対してメソッドを呼び出すことができないためですnull
。ただし、このような参照で拡張メソッドを呼び出すことはできます。これは、拡張メソッドの構文が静的メソッド呼び出しの構文糖衣にすぎないためです。
IsNullOrEmpty
それが拡張メソッドだったとしましょう。次に、次のように呼び出すことができます。
string s = null;
bool result = s.IsNullOrEmpty();
コメントでは、誰かがこの呼び出しがNullReferenceException
. 拡張メソッドは次のように宣言されます。
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string s)
{
return s == null || s.Length == 0;
}
}
...そして、このように使用されます...
string s = null;
bool result = s.IsNullOrEmpty();
...これは...の構文糖衣です
string s = null;
bool result = StringExtensions.IsNullOrEmpty(s);
...したがって、例外はスローされません。そうするのが良い考えかどうかは別の問題です (以下の usr から提供された回答を参照してください)。