C#-“非空”条件的级联

c#

我想问一下在条件级联的情况下如何改进代码的任何提示,您必须询问属性内部的属性是否不为空。

只是简单的虚拟示例:

public class ClassA
{
    public ClassB classB { get; set; }
}
public class ClassB
{
    public List<ClassC> classesC { get; set; }
}
public class ClassC
{
    public ClassD classD { get; set; }
}
public class ClassD
{
    public string value { get; set; }
}

然后假设您想要获得这样的值: classA.classB.classesC.First().classD.value;

当这些类中的任何一个为空时,是否有任何有效的方法可以做到这一点并确保您不会收到错误?而不是许多条件:

if (classA != null && classA.classB != null && classA.classB.classesC != null && classA.classB.classesC.First() != null && classA.classB.classesC.First().classD != null) return classA.classB.classesC.First().classD.value;

请注意,我不是在寻找使用try块和捕获 NullException 的解决方案。

谢谢。

回答

您可以使用空条件运算符,?.

请注意,如果集合为空,您可能还想使用FirstOrDefault()而不是First():First()将抛出,但FirstOrDefault()将返回默认值(null在引用类型的情况下)。

var result = classA?.classB?.classesC?.FirstOrDefault()?.classD?.value;
if (result != null)
{
   return result;
}

您可以将其与一个简单的模式结合起来以简化一些事情:

if (classA?.classB?.classesC?.FirstOrDefault()?.classD?.value is { } x)
{
    return x;
}

{ }这里的模式意味着“一个不为空的对象”。


以上是C#-“非空”条件的级联的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>