3

我在下面有以下代码行。有没有一种方法可以检查 team、DivisionTeam、Team、Coordinator、Profile、Address 和最后一个属性 StateRegion 是否为空,而不是对每个属性都进行检查?

if(team.DivisionTeam.Team.Coordinator.Profile.Address.StateRegion != null)
4

5 回答 5

2

目前在 C# 中,您不能,您必须单独检查每个属性是否为空。

可能是您正在寻找“。?” 运算符,但在 C# 4.0 中不存在,查看这篇文章和 Eric Lippert 的回复:深度空值检查,有没有更好的方法?

于 2012-07-12T06:28:55.643 回答
1

您应该查看以下文章:Chained null checks and the Maybe monad。这是,IMO,真正“做”你所要求的最干净的方式。

而且,不,C# 中没有内置的方法可以直接执行此操作。

于 2012-07-12T13:34:22.627 回答
1

在 C# 6.0 中,您只需一个字符串即可:

var something = team?.DivisionTeam?.Team?.Coordinator?.Profile?.Address?.StateRegion;

查看这篇文章以进一步阅读:空条件运算符

于 2016-02-09T15:35:41.080 回答
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;
}
于 2012-07-12T06:32:42.370 回答
0

在这里检查我的答案:

https://stackoverflow.com/a/34086283/4711853

你可以简单地编写一个小的扩展方法,它可以让你像这样编写链式 lambda:

var value = instance.DefaultOrValue(x => x.SecondInstance)
            .DefaultOrValue(x => x.ThirdInstance)
            .DefaultOrValue(x => x.Value);
于 2015-12-04T10:50:00.970 回答