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

C#字符串在switch case与if比较时是否需要用ToLower()/ToUpper()转大小写?

代码合理性分析

你给出的代码首先存在两处可直接导致编译失败的语法问题:

  1. 方法定义缺少返回值类型,无返回值需加void修饰,即public void somefun(Classabc clsabc, string emptype, string id)
  2. switch分支的case :"AnyInput":多了一个多余的冒号,修正后应为case "AnyInput":

针对你关心的大小写转换问题,分两种场景判断:

不需要转大小写的场景

如果emptype的取值完全是你内部系统可控的,比如是代码中定义的常量、枚举转换得到的字符串、内部模块间约定好固定大小写的传参,那你的判断逻辑完全合理,不需要额外调用ToLower()/ToUpper():

  • 这种场景下固定大小写的匹配性能更高,没有多余的字符串转换开销
  • 完全不存在匹配失败的风险,你的理解是正确的:既然能直接用常量做case匹配,就没必要加多余的转换逻辑,也不违反任何编程规则。

需要处理大小写的场景

如果emptype来自不可控的外部输入,比如用户输入的内容、第三方接口返回、前端用户提交的参数,那你当前的写法存在匹配失败的风险:比如外部传入anyinput/ANYINPUT/Anyinput都会匹配不上对应分支。
这种场景下也不推荐使用ToLower()/ToUpper()做转换,原因有两个:

  • 不同语言的区域性设置会导致非ASCII字符的大小写转换结果不符合预期,比如土耳其语中小写i转大写会变成İ而非普通的I,很容易出现匹配bug
  • 额外的字符串转换会生成新的字符串对象,带来不必要的性能开销

更推荐的写法是用内置的不区分大小写比较逻辑:

  • if判断写法:
if(emptype.Equals("AnyInput", StringComparison.OrdinalIgnoreCase))
{
    // 逻辑代码
}
  • switch写法(C# 7.0及以上版本支持):
switch(emptype)
{
    case string s when s.Equals("AnyInput", StringComparison.OrdinalIgnoreCase):
        // 逻辑代码
        break;
    case string s when s.Equals("StringInput", StringComparison.OrdinalIgnoreCase):
        // 逻辑代码
        break;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:27:03