インスタンス (.NET Framework ではなく) で仮想IsNullOrEmpty()
メソッドを使用するList
と、インスタンスが事実上nullの場合、オブジェクト例外のインスタンスに設定されていないオブジェクト参照がスローされるか、このようなものがスローされるのではないかと考えていました。これを考慮すると、 nullインスタンスでメソッドを呼び出すことは可能ですか?
7 に答える
のみのIsNullOrEmpty()
はありません。後者の場合、それは静的メソッドであるためインスタンスは必要ありません。チェックする文字列参照を渡すと、そこで null をチェックできます。List
String
拡張メソッドは、null の「this」パラメーターを取ることができます。フレームワークのリストの IsNullOrEmpty メソッドについては知りませんが、次のように実装されると想像してください。
public bool IsNullOrEmpty<T>(this IList<T> list)
{
if (list == null) return true;
return list.Count == 0;
}
null 参照でこの (または他の) 拡張メソッドを問題なく呼び出すことができます。
List<int> nullList = null;
if (nullList.IsNullOrEmpty())
{
...
}
AFAIKIsNullOrEmpty
は class のメソッドにすぎず、System.String
では使用できませんList
。拡張メソッドではなく、静的メソッドです。あなたはこのように呼び出します:
string.IsNullOrEmpty(text);
そして、このようではありません
text.IsNullOrEmpty();
したがって、参照がオブジェクトのインスタンスに設定されていないかどうかをチェックするのに問題はありません。
問題の文字列のインスタンスをパラメーターとして受け取る静的メソッドです。
public static bool IsNullOrEmpty(
string value
)
http://msdn.microsoft.com/en-us/library/system.string.isnullorempty%28v=vs.110%29.aspx
IsNullOrEmpty
に対して定義された BLC にメソッドがありませんList
拡張メソッドを簡単に作成できます。
namespace System
{
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string s)
{
return string.IsNullOrEmpty(s);
}
}
}
指摘されているように、リストにはそのような方法はありません。ただし、拡張メソッドを作成するのは簡単です。
public static bool IsNullOrEmpty<T>(this IList<T> list)
{
return (list == null || list.Count == 0);
}
null の例外をスローする場合:
public static bool IsEmpty<T>(this IList<T> list)
{
if (list == null)
throw new ArgumentNullException("list");
return (list.Count == 0);
}
IsNullOrEmpty()
はサポートしていません。文字List
列のみです。以下はIsNullOrEmpty
msdn からの実装です。
result = s == null || s == String.Empty;
リストを確認したい場合は、次のように独自の拡張メソッドを記述してそれを行うことができます。
public static bool IsNullOrEmpty<T>(this ICollection<T> collection)
{
if (collection == null)
return true;
return collection.Count == 0;
}