You need to enable JavaScript to run this app. C#中如何在switch语句内使用Contains()方法实现字符串包含匹配
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何在switch语句内使用Contains()方法实现字符串包含匹配

C# Switch结合Contains实现字符串包含判断的可行方案

原有代码的问题

  • Contains() 方法必须传入要检索的目标字符串参数,原代码括号为空无法通过编译
  • Contains() 方法返回值是bool类型,并非字符串,原代码中Switch传入布尔值却匹配字符串类型的Case,类型完全不兼容,无法正常运行
  • 没有对入参text做非空校验,当text为null时直接调用ToLower()会抛出空引用异常

通用兼容实现(支持所有C#版本)

通过Switch固定匹配true值 + Case守卫条件的方式实现自定义包含判断,完全替代多段else if结构,符合使用Switch语句的需求:

public void Read(string text)
{
    // 入参非空保护,避免空引用异常
    if (string.IsNullOrWhiteSpace(text)) return;

    switch (true)
    {
        // 每个分支对应一个关键词的包含判断
        case true when text.Contains("read", StringComparison.OrdinalIgnoreCase):
            MessageBox.Show(text);
            break;
        case true when text.Contains("not", StringComparison.OrdinalIgnoreCase):
            MessageBox.Show(text);
            break;
        // 可直接扩展其他关键词分支
        default:
            // 未匹配任何关键词的处理逻辑
            break;
    }
}

实现说明

  • 使用Contains的重载方法传入StringComparison.OrdinalIgnoreCase,可直接实现不区分大小写的匹配,无需提前调用ToLower()转换,性能更优
  • 多关键词同时命中时,会按分支的书写顺序匹配第一个符合条件的分支,逻辑优先级和else if完全一致
  • 若需要调整某类匹配的优先级,仅需将对应分支代码移动到更靠前的位置即可

高版本C#简化实现(C# 8及以上)

可使用更简洁的Switch表达式实现相同逻辑:

public void Read(string text)
{
    if (string.IsNullOrWhiteSpace(text)) return;
    _ = text switch
    {
        _ when text.Contains("read", StringComparison.OrdinalIgnoreCase) => MessageBox.Show(text),
        _ when text.Contains("not", StringComparison.OrdinalIgnoreCase) => MessageBox.Show(text),
        _ => null
    };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 14:06:08