C#控制台程序字符串大小写兼容的跨环境判断方案咨询
解决C# switch语句大小写兼容的跨环境写法问题
问题原因
||是逻辑或运算符,仅能用于布尔值判断,不能直接在case中连接字符串,因此触发CS0019错误。or是C# 9.0引入的模式匹配语法,VS2022默认支持,但外部编译环境若未启用C# 9.0及以上版本,会因语法不兼容报错。
通用兼容方案
方案1:统一字符串大小写后判断(最简洁可靠)
先将输入字符串转换为统一大小写(推荐使用不依赖区域设置的ToUpperInvariant()或ToLowerInvariant()),再进行switch判断,所有环境都支持基础语法:
string normalizedValue = value.ToUpperInvariant(); switch (normalizedValue) { case "A": case "J": cardValue = 11; break; case "Q": cardValue = 12; break; case "K": cardValue = 13; break; }
方案2:使用when子句结合忽略大小写比较
利用C# 7.0及以上支持的when模式匹配,搭配StringComparison.OrdinalIgnoreCase实现忽略大小写判断,跨环境兼容性好:
switch (value) { case string s when s.Equals("A", StringComparison.OrdinalIgnoreCase): case string s when s.Equals("J", StringComparison.OrdinalIgnoreCase): cardValue = 11; break; case string s when s.Equals("Q", StringComparison.OrdinalIgnoreCase): cardValue = 12; break; case string s when s.Equals("K", StringComparison.OrdinalIgnoreCase): cardValue = 13; break; }
方案3:强制指定C#语言版本(需外部环境支持)
若坚持使用or语法,需确保编译环境启用C# 9.0及以上版本。在项目文件中添加以下配置,强制指定语言版本:
<PropertyGroup> <LangVersion>9.0</LangVersion> </PropertyGroup>
注:此方案依赖外部编译环境支持对应C#版本,通用性不如前两种。
内容的提问来源于stack exchange,提问作者Siphamandla Dimba
相关产品推荐
相关产品推荐

