C# switch语句中空大括号模式匹配的作用及使用原因
C# Switch表达式中
{ } s的作用解析 你看到的{ } s是C#模式匹配里的空属性模式,核心作用是匹配非null的引用类型实例,同时通过s捕获这个实例。除了替代string s的简化写法外,还有这些实际用途:
类型无关的非null匹配
如果version的类型是基类、object或者泛型参数,{ } s不需要指定具体类型就能捕获所有非null的引用类型实例,后续通过when条件筛选即可。比如当version是object类型时,传入"v1"、new StringBuilder("v2")这类不同的引用类型实例,{ } s都能捕获,而string s只会匹配字符串类型。泛型场景下的安全匹配
在泛型代码中,如果泛型参数没有添加引用类型约束,{ } s会自动排除值类型和null,确保后续调用引用类型的方法(比如Contains)不会出错。如果直接用T s,值类型实例也会被匹配,若后续调用值类型不支持的方法,就会出现编译或运行错误。示例代码:
public static string? ParseVersion<T>(T input) { return input switch { { } s when s.ToString().Contains("v3") => "Version 3 found", null => null, _ => "Unrecognized version" }; }代码写法的一致性
如果你的代码中需要在多个地方匹配非null的引用类型,用{ } s可以保持写法统一,不用根据变量的具体类型反复修改模式语句。
当version是明确的string类型时,{ } s和string s的效果几乎一致——都只会匹配非null的字符串实例,但{ } s的写法更通用,能轻松适配类型变化的场景。
内容的提问来源于stack exchange,提问作者Giorgi Nakeuri
相关产品推荐
相关产品推荐

