C#中检查所有子属性是否为null

3
我有以下代码行,请问是否有一种方法可以检查团队,DivisionTeam,Team,Coordinator,Profile,Address和最后一个属性StateRegion是否为null,而不是针对每个属性都进行检查?
if(team.DivisionTeam.Team.Coordinator.Profile.Address.StateRegion != null)

你需要编写自己的方法来完成这个任务。 - Waqar Janjua
可能是 https://dev59.com/LXI95IYBdhLWcg3w8y2N 的重复问题。 - Ivan Golović
C#中检查属性的属性是否为空的优雅方式 - Jacob Seleznev
5个回答

2

目前在C#中,您无法使用“?.”操作符。 您必须逐个检查每个属性是否为null。

也许您正在寻找“?.”运算符,但在C#4.0中没有该运算符。请查看此帖子以及Eric Lippert的回复:Deep null checking, is there a better way?


你能使用反射吗? - Mike Flynn
@MikeFlynn,我不确定,在这种情况下你会如何使用反射? - Habib

1
在C# 6.0中,您可以只使用一个字符串来完成它: var something = team?.DivisionTeam?.Team?.Coordinator?.Profile?.Address?.StateRegion; 请查看此文章以获取更多信息:null-conditional operator

1

0

这是一个示例

private bool IsValidTeam(Team team)
{ 
    bool result = false;
    if (team != null)
        if (team.DivisionTeam != null)
            if (team.DivisionTeam.Team != null)
                if (team.DivisionTeam.Team.Coordinator != null)
                    if (team.DivisionTeam.Team.Coordinator.Profile != null)
                        if (team.DivisionTeam.Team.Coordinator.Profile.Address != null)
                            if (team.DivisionTeam.Team.Coordinator.Profile.Address.StateRegion != null)
                                result = true;
    return result;
}

0

请在此处检查我的答案:

https://dev59.com/lX7aa4cB1Zd3GeqPxPmC#34086283

你可以编写一个小的扩展方法,使你能够像这样编写链式 lambda:
var value = instance.DefaultOrValue(x => x.SecondInstance)
            .DefaultOrValue(x => x.ThirdInstance)
            .DefaultOrValue(x => x.Value);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接