我有一大堆的串我需要使用。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();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top