-5

我想知道,在实例上使用假设IsNullOrEmpty()方法List(不在 .NET Framework 中),如果实例有效地为null,它将抛出未设置为对象异常实例的 Object 引用,或类似的东西。考虑到这一点,是否可以在实例上调用方法?

4

7 回答 7

12

没有一个IsNullOrEmpty()for a Listonly String。在后者的情况下,它是一个静态方法,所以不需要实例,你传入一个字符串引用来检查,它可以在那里检查 null。

于 2013-11-05T13:03:48.937 回答
6

扩展方法可以采用空的“this”参数。我不知道框架中列表的任何方法 IsNullOrEmpty,但想象一下它会被实现为:

public bool IsNullOrEmpty<T>(this IList<T> list)
{
    if (list == null) return true;
    return list.Count == 0;
}

您可以毫无问题地在空引用上调用此(或任何其他)扩展方法:

List<int> nullList = null;
if (nullList.IsNullOrEmpty())
{
    ...
}
于 2013-11-05T13:08:05.690 回答
3

AFAIKIsNullOrEmpty只是类的一种方法,System.String不适用于List. 它是静态方法,而不是扩展方法。你这样称呼:

string.IsNullOrEmpty(text);

而不是这样

text.IsNullOrEmpty();

因此,检查引用是否未设置为对象的实例没有问题。

于 2013-11-05T13:04:29.120 回答
1

它是一种静态方法,将相关字符串的实例作为参数。

public static bool IsNullOrEmpty(
    string value
)

http://msdn.microsoft.com/en-us/library/system.string.isnullorempty%28v=vs.110%29.aspx

IsNullOrEmptyBLC中没有为List

您可以轻松创建扩展方法:

namespace System
{
    public static class StringExtensions
    {
        public static bool IsNullOrEmpty(this string s)
        {
            return string.IsNullOrEmpty(s);
        }
    }
}
于 2013-11-05T13:03:42.633 回答
1

正如已经指出的那样,列表没有这种方法。很容易编写扩展方法,但是:

public static bool IsNullOrEmpty<T>(this IList<T> list)
{
     return (list == null || list.Count == 0);
}

如果要为空值抛出异常:

public static bool IsEmpty<T>(this IList<T> list)
{
    if (list == null)
        throw new ArgumentNullException("list");

    return (list.Count == 0);
}
于 2013-11-05T13:08:15.627 回答
1

CLR中没有List<T>.IsNullOrEmpty()

但是,也许有人为 List 写了一个扩展方法。它看起来像这样:

public static class ListExt
{
    public static bool IsNullOrEmpty<T>(this List<T> self)
    {
        return (self == null) || (self.Count == 0);
    }
}

如果是这样,您可以从实现中看到您可以安全地传递null参数self。这段代码会发生这种情况:

List<int> lint = null;

if (lint.IsNullOrEmpty())
{
    // ...

这会调用传递lint给它的扩展方法;在这种情况下,它通过null并且(self == null)实现中的检查将导致false返回,并防止任何NullReferenceException被抛出。

于 2013-11-05T13:11:37.690 回答
0

IsNullOrEmpty()不支持aList它只适用于String 。以下是IsNullOrEmpty来自msdn的implimentaion。

result = s == null || s == String.Empty;

如果您想检查列表,您可以编写自己的扩展方法来执行以下操作。

  public static bool IsNullOrEmpty<T>(this ICollection<T> collection)
    {
        if (collection == null)
            return true;

        return collection.Count == 0;
    }
于 2013-11-05T13:14:34.760 回答