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

能否用C#模式匹配与switch语句优化if-else链式代码?

用C#模式匹配+Switch优化多条件赋值代码

当然可以用C#的模式匹配和switch语句(尤其是switch表达式)来优化这类if-else链式赋值逻辑,解决你提到的"switch需绑定单个变量"的问题,下面直接给方案:

先明确原逻辑场景(示例)

假设你的原if-else代码大概是这样的:

string target = "";
if (a == "condition1")
{
    target = "value1";
}
else if (b == "condition2")
{
    target = "value2";
}
else if (c > 100)
{
    target = "value3";
}
else if (d is not null && d.Contains("key"))
{
    target = "value4";
}
else if (e == DateTime.Today)
{
    target = "value5";
}
else if (f)
{
    target = "value6";
}

优化方案1:用switch表达式+_ when模拟else if逻辑

利用C# 8.0引入的switch表达式,结合_(通配符模式)和when条件从句,完美替代原if-else的顺序判断逻辑,不需要绑定到单个变量:

string target = a switch
{
    "condition1" => "value1",
    _ when b == "condition2" => "value2",
    _ when c > 100 => "value3",
    _ when d is not null && d.Contains("key") => "value4",
    _ when e == DateTime.Today => "value5",
    _ when f => "value6",
    _ => "" // 默认值,对应原逻辑的else分支
};

优化方案2:组合变量匹配(元组模式)

如果你的逻辑需要同时判断多个变量的组合条件,可以用C# 8.0支持的元组模式,把多个变量打包成元组进行匹配:

string target = (a, b, c) switch
{
    ("condA", "condB", _) => "valueAB",
    ("condA", _, > 100) => "valueA_C",
    (_, "condB", <= 50) => "valueB_C",
    _ when d is not null and Contains("key") => "valueD", // C#9+支持逻辑模式简化
    _ when f => "valueF",
    _ => ""
};

关键注意点

  • 确保项目使用C# 8.0及以上版本(可在项目属性中设置语言版本)
  • switch表达式的匹配顺序和原if-else完全一致,从上到下匹配第一个符合条件的分支,所以不要随意调整case顺序
  • 可以结合多种模式:常量模式、类型模式、关系模式、逻辑模式(C#9+)等,进一步简化条件判断

内容的提问来源于stack exchange,提问作者citykid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:13:30