题
我有一大堆的串我需要使用。Trim()上,但是他们可以为空。这将是更简洁如果我能做些什么,如:
string endString = startString !?? startString.Trim();
基本上返回一部分的权利,如果该部分在左边不是空的,否则,刚刚返回的零值。我刚刚结束使用的三元操作,但是无论如何使用空结合运营商为此目的?
解决方案
您可以创建一个扩展方法,该方法返回null
当它试图修整值。
public String TrimIfNotNull(this string item)
{
if(String.IsNullOrEmpty(item))
return item;
else
return item.Trim();
}
请注意您不能命名它修剪,因为扩展方法不能覆盖实例方法。
其他提示
不要规格:这并不是说我喜欢它,但你可以使用:
string endString = (startString ?? String.Empty).Trim();
要SPEC,更好像@ Kevin的扩展方法:强>
string endString = (startString == null ? null : startString.Trim());
string endString = string.IsNullOrEmpty(startString) ? startString : startString.Trim();
虽然我还写了一个叫这确实你在一个方法说明,而不必每次都用这个配方是什么“safeTrim”字符串扩展方法的途径。请查看凯文输入反应的代码。
修改:哇!我拥有了各种落后的,错误地命名变量和扭转三元运营商,更多的理由来写一个扩展方法和代码比我做检查
使用
string endString = (startString ?? "").Trim();
此使用一个empy字符串,如果startString为空。然而,这确实的不强>返回空时endString
为空。
抱歉的巫,但是我有同样的问题,我解决了这个使用的λ操作。这是不是最漂亮的,但它使我的代码简洁。
这是一个耻辱C#不支持静态导入或个别功能的进口,但无论如何:
定义该功能的地方:
private static TResult N<TParent,TResult>(TParent parent, Func<TParent,TResult> operation) {
if( parent == null ) return default(TResult);
return operation( parent );
}
然后使用它在您的示例:
String endString = N(startString, s => s.Trim());
在N
函数返回null
如果第一个参数为空,否则会与值作为参数计算指定lambda函数。
您可以嵌套它,当然,像这样。例如,为了安全地解除引用的长链,e.g。
String someValue = someObject.SomeProperty.SomeOtherProperty.SomeMethod().SomeFinalProperty;
如果任何这些属性或方法返回NULL,则你必须在任何地方插入null检查,或者你可以这样做:
String someValue = N(N(N(N(someObject, o => o.SomeProperty), o => o.SomeOtherProperty), o => o.SomeMethod()), o => o.SomeFinalProperty);
正如我所说,它是不是最漂亮:)
您可以通过使N
System.Object
的扩展方法,像这样简化这样:
String someValue = someObject.N( o => o.SomeProperty ).N( o => o.SomeOtherProperty ).N( o => o.SomeMethod() ).N( o => o.SomeFinalProperty );
...我认为这是一个很大整洁。
以下不传播空但它接受空作为参数,并在这种情况下返回空字符串。
using Microsoft.VisualBasic; // you need to add a reference to Microsoft.VisualBasic.dll
...
string endString = Strings.Trim(startString);
...
<子>鸭&运行... 子>
创建方法如:
string MyTrim(string a) {
if (a != null) {
a = a.Trim();
}
return a;
}
由于作为侧面说明,如果你使用.NET 4中,有一个新的简便方法的 String.IsNullOrWhiteSpace
您可以使用。
开始C#6.0(.净框架4.6/Visual Studio2015年)可以使用 null条件的成员访问:
string? endString = startString?.Trim();