String.IsNullOrBlank扩展方法我一直在检查字符串字段,检查它们是否为null或空白。if(myString==null||myString.Trim().Length==0){thrownewArgumentException("无法处理空白字符串。");}为了节省您自己的打字时间,创建一个具有相同效果扩展方法的String类?我了解如何向类实例添加扩展方法,但是向类添加静态扩展方法呢?if(String.IsNullOrBlank(myString)){thrownewArgumentException("无法处理空白字符串。");你可以这样做:publicstaticboolIsNullOrBlank(thisStringtext){returntext==null||text.Trim().Length==0;}然后这样调用它:if(myString.IsNullOrBlank()){thrownewArgumentException("Blankstringscannotbehandled.");这是可行的,因为C#允许您在空实例上调用扩展方法。我知道这是一个老问题,但由于它被问到并且没有被提及,从.NET4.0开始,您可以简单地使用String.IsNullOrWhiteSpace方法来获得相同的结果。您可以安全地在实例上使用扩展方法:publicstaticclassStringExtensions{publicstaticboolIsNullOrBlank(thisstrings){returns==null||s.Trim().Length==0;}}测试用例:strings=null;Assert.IsTrue(s.IsNullOrBlank());小号=“”;Assert.IsTrue(s.IsNullOrBlank());虽然看起来有点奇怪,但我会弄清楚为什么你的字符串需要经常检查这种情况。如果你在源头上修复它们,你以后就不必对它们如此偏执了!您可以向现有类添加静态方法吗?答案是否定的,值很小,因为还是要先知道要打哪个类名;使用扩展方法的好处是你可以从一个变量名开始,自动完成会告诉你什么适用于它。经常提出的另一点是,如果第一个参数为null,扩展方法应尽快抛出异常。但是,如果该方法在其名称中提到它旨在检查空值,那么我认为该规则是多余的。您遇到的真正问题是,您希望在检查空引用后整齐且可读地运行一些代码。捕捉这种模式的一种方法是我对这个问题的回答。现有答案的重载可能是:publicstaticboolIsNullOrBlank(thisStringtext,ActiondoWhat){if(text!=null&&text.Trim().Length>0)doWhat(text);如果您只想运行给定有效值的代码,那将很有帮助。不是一个非常有用的例子,只是展示用法:Name.IsNullOrBlank(name=>Console.WriteLine(name));有点晚了。但是您也可以将代码放在扩展方法中以抛出异常。我有两种方法(用于ArgumentNullException和NullReferenceException)。//字符串publicstaticboolNullBlankCheck(thisstrings,stringmessage="",boolthrowEx=true){returnCheck(s.IsNullOrBlank(),throwEx,message);}publicstaticboolNullBlankCheckArgument(thisstrings,stringmessage="",boolthrowEx=true){returnCheck(s.IsNullOrBlank(),throwEx,message);}privatestaticboolCheck(boolisNull,boolthrowEx,stringexceptionMessage)whereT:Exception{if(throwEx&&isNull)throwActivator.CreateInstance(typeof(T),exceptionMessage)作为异常;返回为空;}publicstaticboolIsNullOrBlank(thisstrings){returnstring.IsNullOrEmpty(s)||s.Trim().Length==0;}nunit测试:Assert.Throws(()=>{"".NullEmptyCheck();});Assert.Throws(()=>{"".NullEmptyCheckArgument();});然后将其用作:publicvoidMethod(stringsomeStr){someStr.NullBlankCheckArgument();//做一些事情varstr=someMethod();str.NullBlankCheck();}BillWagner在MoreEfficientC#中建议不要让扩展函数使用null实例(第183页)。原因是扩展方法应该看起来像方法调用,并且您不能调用具有空实例的方法。通过一些技巧,您可以看起来像是在任何cs文件中添加到String类:text.Trim().长度==0;}}}(注意,这不是扩展方法,请参阅我的评论)。然后,在其他一些CS文件中:usingString=JDanielSmith.String;namespaceFoo.Bar.Baz{classProgram{staticvoidtest(stringmyString){if(String.IsNullOrBlank(myString)){thrownewArgumentException("无法处理空白字符串。");}}...请注意String.IsNullOrBlank()的“必需”语法。我不一定建议您实际以这种方式做事,只是指出如何进行设置以使您的代码正常工作。publicstaticboolIsNullOrEmptyTrimmed(stringvalue){return(value==null||value.Length==0)?真:价值。修剪()。长度==0;以上就是C#学习教程:String.IsNullOrBlankextension方法分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多加关注——publicstaticboolIsNullOrEmpty(这个字符串值,boolcheckTrimmed){varb=String.IsNullOrEmpty(值);返回checkTrimmed?(b&&value.Trim().Length>0):b;}publicstaticboolIsNull(thisobjecto){returnstring.IsNullOrEmpty(o.ToStr());}publicstaticboolIsNotNull(thisobjecto){return!string.IsNullOrEmpty(o.ToStr());}publicstaticstringToStr(thisobjecto){returno+"";管理员删除。如需转载请注明出处:
