如何在空列表中使用空条件运算符?

时间:2016-06-07 10:17:15

标签: c# c#-6.0

我有一个对象(对于这个例子保持简单),例如:

public class MyObject
{
    public ICollection<OtherObject> OtherObjects { get; set; }
}

public class OtherObject
{
    public bool IsValid() { return true; }
}

目前在我的代码中我做了:

bool ok = false;
if (myObject.OtherObjects != null && myObject.OtherObjects.Count > 0)
{
    var last = myObject.OtherObjects.Last();
    ok = last.IsValid();
}

现在,使用C#6.0,可以在一行代码中执行此操作:

bool? ok = myObject.OtherObjects?.Last()?.IsValid();

然而,在这种情况下,空条件运算符不起作用,因为上面的返回异常

  

序列不包含任何元素。

所以在这种情况下,我是否仍然需要使用旧方法来检查空值而不是使用空条件运算符的新方法?

或者有更好的方法吗?

2 个答案:

答案 0 :(得分:6)

null条件运算符与@ {Jeroen提到的LastOrDefault()很好地结合在一起。

您可以这样做:

bool ok = myObject.OtherObjects?.LastOrDefault()?.IsValid() ?? false;

答案 1 :(得分:1)

该列表不包含任何元素,但它不是null,否则您将获得NullReferenceException。你能做的就是改变它:

bool? ok = myObject.OtherObjects?.Any() ?? false && myObject.OtherObjects.Last().IsValid();