在C#中,如何在可能为空的实例上调用方法?
我想知道,在在C#中,如何在可能为空的实例上调用方法?,c#,C#,我想知道,在列表实例(不在.NET Framework中)上使用假设的IsNullOrEmpty()方法,如果实例实际上为null,它将抛出一个未设置为对象异常实例的对象引用,或者类似的情况。考虑到这一点,是否可以对空实例调用方法?它是一种静态方法,将所讨论字符串的实例作为参数 public static bool IsNullOrEmpty( string value ) 在为列表定义的BLC中没有IsNullOrEmpty方法 您可以轻松创建扩展方法: namespace Sys
列表
实例(不在.NET Framework中)上使用假设的IsNullOrEmpty()
方法,如果实例实际上为null,它将抛出一个未设置为对象异常实例的对象引用,或者类似的情况。考虑到这一点,是否可以对空实例调用方法?它是一种静态方法,将所讨论字符串的实例作为参数
public static bool IsNullOrEmpty(
string value
)
在为列表定义的BLC中没有IsNullOrEmpty
方法
您可以轻松创建扩展方法:
namespace System
{
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string s)
{
return string.IsNullOrEmpty(s);
}
}
}
对于列表
仅字符串
,没有IsNullOrEmpty()。在latters的情况下,它是一个静态方法,因此不需要实例,您传入一个字符串引用进行检查,它可以在那里检查null。AFAIKIsNullOrEmpty
只是类System.string
的一个方法,不可用于List
。它是一种静态方法,而不是扩展方法。你这样称呼:
string.IsNullOrEmpty(text);
public static class ListExt
{
public static bool IsNullOrEmpty<T>(this List<T> self)
{
return (self == null) || (self.Count == 0);
}
}
而不是像这样
text.IsNullOrEmpty();
因此,检查引用是否未设置为对象的实例没有问题。扩展方法可以采用null“this”参数。我不知道框架中有哪种方法对于列表是空的,但想象一下它的实现方式如下:
public bool IsNullOrEmpty<T>(this IList<T> list)
{
if (list == null) return true;
return list.Count == 0;
}
public bool为空(此IList列表)
{
if(list==null)返回true;
返回列表。计数==0;
}
您可以在空引用上调用此(或任何其他)扩展方法,而不会出现任何问题:
List<int> nullList = null;
if (nullList.IsNullOrEmpty())
{
...
}
List nullList=null;
if(nullList.IsNullOrEmpty())
{
...
}
正如已经指出的,列表没有这种方法。但是,编写扩展方法非常简单:
public static bool IsNullOrEmpty<T>(this IList<T> list)
{
return (list == null || list.Count == 0);
}
publicstaticbool为空(此IList列表)
{
返回(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);
}
公共静态bool为空(此IList列表)
{
if(list==null)
抛出新的ArgumentNullException(“列表”);
返回(list.Count==0);
}
CLR中没有列表。IsNullOrEmpty()
然而,也许有人为List编写了一个扩展方法。它看起来像这样:
string.IsNullOrEmpty(text);
public static class ListExt
{
public static bool IsNullOrEmpty<T>(this List<T> self)
{
return (self == null) || (self.Count == 0);
}
}
这将调用将lint
传递给它的扩展方法;在这种情况下,它将通过null
,实现中的(self==null)
检查将导致返回false
,并将防止抛出任何null引用异常
不支持列表
它只支持字符串。以下是msdn中IsNullOrEmpty
的实现
result = s == null || s == String.Empty;
如果您想检查列表,您可以编写自己的扩展方法,如下所示
public static bool IsNullOrEmpty<T>(this ICollection<T> collection)
{
if (collection == null)
return true;
return collection.Count == 0;
}
公共静态bool为空(此ICollection集合)
{
if(集合==null)
返回true;
返回集合。计数==0;
}
IsNullOrEmpty()方法在列表上执行
实例!恐怕没有这样的方法你在哪里看到的?可能在List
上有第三方扩展方法?我没有提到IsNullOrEmpty()
是List
的.NET Framework扩展。这确实是一种第三方扩展方法。什么是第三方库?如果您将其名称添加到问题中,您可能会得到更相关的答案:)这不是扩展方法。非常确定它实际上不是扩展方法。这不是扩展方法。扩展方法必须是静态类的一部分,并且第一个参数必须以this开头抱歉,是的,它只是string
+1上的static
方法,我的朋友,你真的回答了下面的问题。@AntP,没问题;现在你已经删除了你的评论,我将删除我的评论。但是,FWIW,这句话FWIW,当我第一次发布时,似乎有些ajax调用搞乱了友好的时间字符串,因为它告诉我我领先了20秒。
仍然不符合本论坛的精神。当你来到这里只是为了帮助人们,你做了更多的好事,获得了更多的声誉,因为你有正确的动机。