创建SkyGlobe对象时,如何为OrbitYear设置三个可选值?
多条件分支替代三元运算符的几种方案
要处理三个可选值的分支逻辑,你可以用下面几种语法替代原本的二元三元运算符:
- 嵌套三元运算符:如果只是新增一个判断条件,嵌套三元是最直接的方式,虽然可读性会随条件增多下降,但两个嵌套还是能接受的:
select new SkyGlobe { Id = sg.NetId, ProjectName = sg.projName, OrbitYear = previousYears.Contains(sg.ProjId) ? firstYear : yourSecondCondition ? secondYear : testYear, // 替换成你的第二个判断条件 OrbiterId = previousYears.Contains(sg.ProjId) ? mainOrbit : secondaryOrbit, LeaderName = sg.OrbiterName };
- switch表达式(C# 8.0及以上):这种方式可读性更强,尤其适合多分支场景,逻辑一目了然:
select new SkyGlobe { Id = sg.NetId, ProjectName = sg.projName, OrbitYear = sg.ProjId switch { var id when previousYears.Contains(id) => firstYear, var id when yourSecondCondition(id) => secondYear, // 自定义第二个判断逻辑 _ => testYear // 默认分支 }, OrbiterId = previousYears.Contains(sg.ProjId) ? mainOrbit : secondaryOrbit, LeaderName = sg.OrbiterName };
- 提取逻辑到单独方法:如果判断逻辑复杂或需要复用,把OrbitYear的判断抽成单独方法会让代码更整洁:
// 先定义判断方法 private static int GetOrbitYear(int projId, List<int> previousYears, int firstYear, int secondYear, int testYear) { if (previousYears.Contains(projId)) return firstYear; if (yourSecondCondition(projId)) // 替换成你的第二个判断条件 return secondYear; return testYear; } // 在对象初始化中调用方法 select new SkyGlobe { Id = sg.NetId, ProjectName = sg.projName, OrbitYear = GetOrbitYear(sg.ProjId, previousYears, firstYear, secondYear, testYear), OrbiterId = previousYears.Contains(sg.ProjId) ? mainOrbit : secondaryOrbit, LeaderName = sg.OrbiterName };
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

