我在下面有以下代码行。有没有一种方法可以检查 team、DivisionTeam、Team、Coordinator、Profile、Address 和最后一个属性 StateRegion 是否为空,而不是对每个属性都进行检查?
if(team.DivisionTeam.Team.Coordinator.Profile.Address.StateRegion != null)
目前在 C# 中,您不能,您必须单独检查每个属性是否为空。
可能是您正在寻找“。?” 运算符,但在 C# 4.0 中不存在,查看这篇文章和 Eric Lippert 的回复:深度空值检查,有没有更好的方法?
您应该查看以下文章:Chained null checks and the Maybe monad。这是,IMO,真正“做”你所要求的最干净的方式。
而且,不,C# 中没有内置的方法可以直接执行此操作。
在 C# 6.0 中,您只需一个字符串即可:
var something = team?.DivisionTeam?.Team?.Coordinator?.Profile?.Address?.StateRegion;
查看这篇文章以进一步阅读:空条件运算符。
这是一个示例
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;
}
在这里检查我的答案:
https://stackoverflow.com/a/34086283/4711853
你可以简单地编写一个小的扩展方法,它可以让你像这样编写链式 lambda:
var value = instance.DefaultOrValue(x => x.SecondInstance)
.DefaultOrValue(x => x.ThirdInstance)
.DefaultOrValue(x => x.Value);