所以我一直对这个感兴趣?运营商,但仍然无法使用它.当我做的事情时,我通常会想到:
var x = (someObject as someType).someMember;
Run Code Online (Sandbox Code Playgroud)
如果someObject有效且someMember为null,我可以这样做
var x = (someObject as someType).someMember ?? defaultValue;
Run Code Online (Sandbox Code Playgroud)
但是当someObject为null时,我几乎总是遇到问题,而且?? 并没有帮助我使这个更清洁,而不是自己做空检查.
你们找到了什么用途?在实际情况?
如何在深层lamda表达式中检查空值?
比方说,我有一个嵌套了几层深度的类结构,我想执行以下lambda:
x => x.Two.Three.Four.Foo
Run Code Online (Sandbox Code Playgroud)
如果Two,Three或Four为null,我希望它返回null,而不是抛出System.NullReferenceException.
public class Tests
{
// This test will succeed
[Fact]
public void ReturnsValueWhenClass2NotNull()
{
var one = new One();
one.Two = new Two();
one.Two.Three = new Three();
one.Two.Three.Four = new Four();
one.Two.Three.Four.Foo = "blah";
var result = GetValue(one, x => x.Two.Three.Four.Foo);
Assert.Equal("blah", result);
}
// This test will fail
[Fact]
public void ReturnsNullWhenClass2IsNull()
{
var one = new One();
var result = GetValue(one, x => x.Two.Three.Four.Foo);
Assert.Equal(null, result);
}
private TResult GetValue<TModel, TResult>(TModel model, …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个通用扩展方法,让我这样做:
this.startDate = startDateXAttribute.NullOrPropertyOf<DateTime>(() =>
{
return DateTime.Parse(startDateXAttribute.Value);
});
Run Code Online (Sandbox Code Playgroud)
NullOrPropertyOf()将返回null如果它是一个上使用的null对象(例如,如果startDateXAttribute是null),或返回的结果Func,如果它不为空.
这种扩展方法会是什么样的?