C#中switch语句报'header' is a variable but is used like a type原因问询
C# switch(true)语法报错
'header' is a variable but is used like a type原因解析 你遇到的编译错误是由使用的C#语言版本不支持对应switch语法导致的:
- C# 9.0 才引入了对
switch(true)模式下直接在case后跟布尔表达式的语法支持,低于该版本的编译器无法识别case后的动态计算表达式。 - 低版本编译器解析case后的内容时,会优先匹配原生支持的「类型模式」语法(即
case 类型名 变量名:的结构),此时会把你写的header误判为要声明的类型,而header实际是字符串变量,因此抛出对应错误。
解决方案
方案1:升级C#语言版本
将项目的C#语言版本升级到9.0及以上(.NET 5及以上版本的项目默认支持C# 9.0+),升级后你写的原有代码可以正常编译运行。
方案2:兼容低版本的switch写法
如果无法升级语言版本,可以使用when条件子句实现相同逻辑:
var header = "ABCDEfooGHIJ"; switch (true) { case bool _ when header.Contains("foo"): return true; case bool _ when header.Contains("bar"): return false; }
方案3:改用if分支实现
当前场景逻辑简单,直接使用if分支可读性更高,不需要强行使用switch语法:
var header = "ABCDEfooGHIJ"; if (header.Contains("foo")) return true; if (header.Contains("bar")) return false;
内容的提问来源于stack exchange,提问作者danielmulroy
相关产品推荐
相关产品推荐

