C#模式匹配能否对属性值做运算处理后再执行匹配校验?
C#模式匹配属性运算校验实现方案
C# 支持对属性值做运算后再进行模式匹配校验,你给出的写法不合法,是因为属性模式的右侧仅支持合法模式表达式,不支持直接写任意布尔运算语句。
针对你需要判断Baz.Length >5的场景,有两种常用的合法实现方式:
方式1:嵌套属性模式(推荐,C# 8.0及以上支持)
对于直接访问属性的简单运算,可以直接把属性访问路径写到模式的左侧,语法最简洁:
if (test is { Bar: >= 100, Baz.Length: > 5 }) { // 业务逻辑 }
方式2:变量捕获+后续判断(适合复杂运算场景)
如果需要做更复杂的运算(比如调用方法、多步计算等),可以先用var模式捕获属性值,再追加判断条件:
// 示例:对Baz做去空格后再判断长度 if (test is { Bar: >= 100, Baz: var baz } && baz.Trim().Length > 5) { // 业务逻辑 }
如果是在switch分支中使用,也可以搭配when子句实现:
switch (test) { case { Bar: >= 100 } when test.Baz.Length > 5: // 业务逻辑 break; }
内容的提问来源于stack exchange,提问作者Roy Berris
相关产品推荐
相关产品推荐

