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

如何在列表模式匹配中结合特定StringComparison进行字符串比较?

如何在列表模式匹配中结合特定StringComparison进行字符串比较?

嗨,这个问题确实戳中了C#列表模式匹配的一个小局限——默认的字符串匹配是用==,没法直接指定StringComparison规则,但咱们有几个优雅的办法能搞定,我给你详细说说:

方法一:用when子句搭配string.Equals

这是最直接也最常用的方案,既保留列表模式匹配的简洁性(自动帮你判断列表非空、长度为4,还能提取需要的元素),又通过when子句补上自定义的字符串比较逻辑:

var a = new List<string>();
if (a is [var first, _, var third, _] test 
    when string.Equals(first, "aSdfüü", StringComparison.OrdinalIgnoreCase)
    && string.Equals(third, "1.1", StringComparison.OrdinalIgnoreCase))
{
    // 这里写你的业务逻辑
}

你也可以把&&条件放到when外面,效果完全一致,看你个人代码风格偏好就行。

方法二:封装扩展方法提升可读性

如果你的代码里经常需要用特定的StringComparison做比较,不妨封装一个扩展方法,让代码更清爽:

public static class StringExtensions
{
    public static bool EqualsOrdinalIgnoreCase(this string str, string target)
    {
        return string.Equals(str, target, StringComparison.OrdinalIgnoreCase);
    }
}

然后使用的时候就非常简洁直观了:

if (a is [var first, _, var third, _] test 
    when first.EqualsOrdinalIgnoreCase("aSdfüü") && third.EqualsOrdinalIgnoreCase("1.1"))
{
    // 这里写你的业务逻辑
}

为什么默认模式做不到?

你提到编译后的代码用了==,这是因为C#的列表模式中,字面量匹配是直接绑定到==运算符的,目前没有语法支持直接在模式里指定字符串比较规则,所以必须通过额外的条件来补充自定义逻辑。

备注:内容来源于stack exchange,提问作者hardfork

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:47:35