String.IsNullOrBlank扩展方法

sip*_*wiz 14 c# extension-methods

我不断检查字符串字段以检查它们是否为空或空白.

if(myString == null || myString.Trim().Length == 0)
{
    throw new ArgumentException("Blank strings cannot be handled.");
}
Run Code Online (Sandbox Code Playgroud)

为了节省自己的一些输入,可以为String类创建一个具有相同效果的扩展方法吗?我理解如何为类实例添加扩展方法,但是如何向类添加静态扩展方法呢?

if(String.IsNullOrBlank(myString))
{
    throw new ArgumentException("Blank strings cannot be handled.");
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*ean 36

你可以这样做:

public static bool IsNullOrBlank(this String text)
{
  return text==null || text.Trim().Length==0;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

if(myString.IsNullOrBlank())
{
  throw new ArgumentException("Blank strings cannot be handled.");
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为C#允许您在null实例上调用扩展方法.

  • @dan - 我不认为一个暗示其名称空检查的方法对扩展方法不利. (13认同)
  • Bill Wagner在"更有效的C#"中建议不要使扩展函数与null实例一起使用(第183页).原因是扩展方法应该看起来像方法调用,并且您不能使用null实例调用方法. (7认同)
  • 你不应该使扩展方法使用"null"的原因是因为它们应该感觉像实例方法. (2认同)

Ahm*_*eed 16

我知道这是一个古老的问题,但由于它已被提出并且尚未提及,因此从.NET 4.0开始,您只需使用String.IsNullOrWhiteSpace方法即可获得相同的结果.


Jim*_*old 6

您可以安全地在实例上使用扩展方法:

public static class StringExtensions
{
    public static bool IsNullOrBlank(this string s)
    {
        return s == null || s.Trim().Length == 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试用例:

string s = null;
Assert.IsTrue(s.IsNullOrBlank());
s = " ";
Assert.IsTrue(s.IsNullOrBlank());
Run Code Online (Sandbox Code Playgroud)

虽然它看起来有点奇怪,但我想知道为什么你的字符串需要经常检查这个案例.如果你在源头修复它们,你将不必在以后对它们如此偏执!