否定null-coalescing运算符
我有一堆字符串我需要使用.Trim(),但它们可以为null。 如果我可以这样做,那将更加简洁:
string endString = startString !?? startString.Trim();
如果左侧的部分为非null,则基本上返回右侧的部分,否则只返回空值。 我刚刚使用了三元运算符,但是为了这个目的,无论如何都使用空合并运算符?
您可以创建一个扩展方法,在尝试修剪该值时返回null
。
public String TrimIfNotNull(this string item) { if(String.IsNullOrEmpty(item)) return item; else return item.Trim(); }
请注意,您无法将其命名为Trim,因为扩展方法无法覆盖实例方法。
不是规格:不是我喜欢它,但你可以使用:
string endString = (startString ?? String.Empty).Trim();
对于规范,更好的扩展方法,如@ Kevin’s:
string endString = (startString == null ? null : startString.Trim());
string endString = string.IsNullOrEmpty(startString) ? startString : startString.Trim();
虽然我也开始编写一个名为“safeTrim”的字符串扩展方法,它在一种方法中执行您所描述的内容,而不是每次都必须使用此配方。 查看Kevin对代码的反应 。
编辑 :哇我有各种向后,错误命名变量和反向三元运算符,更有理由编写一个扩展方法和代码检查它比我做得更好!
使用
string endString = (startString ?? "").Trim();
如果startString为null,则使用empy字符串。 但是,当endString
为null时,这不会返回null。
对不起,但我遇到了同样的问题,我使用lambda操作解决了这个问题。 它不是最漂亮的,但它保持我的代码简洁。
遗憾的是C#不支持静态导入或单个函数导入,但无论如何:
在某处定义此function:
private static TResult N(TParent parent, Func operation) { if( parent == null ) return default(TResult); return operation( parent ); }
然后在你的例子中使用它:
String endString = N(startString, s => s.Trim());
如果第一个参数为null,则N
函数返回null
,否则它将使用值作为参数计算指定的lambda函数。
当然,你可以嵌套它。 例如,要安全地取消引用长链,例如
String someValue = someObject.SomeProperty.SomeOtherProperty.SomeMethod().SomeFinalProperty;
如果这些属性或方法中的任何一个返回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 );
…我认为这更整洁。
以下内容不传播null,但它接受null作为参数,并在这种情况下返回一个空字符串。
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(.NET Framework 4.6 / Visual Studio 2015)开始,您可以使用空条件成员访问 :
上述就是C#学习教程:否定null-coalescing运算符分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
string? endString = startString?.Trim();
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/953317.html