You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:55:12