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

C#:‘==’运算符无法用于method group与string错误及int数组与string比较需求

解决Operator '==' cannot be applied to operands of type 'method group' and 'string'错误

嘿,这个问题其实很好排查,我来帮你一步步搞定!

首先,你遇到的错误根源非常明确:你写了s.ToString而不是s.ToString()——ToString是一个方法,不加括号的话它代表的是「方法组」本身,而不是执行方法后返回的字符串值,自然没法和string类型的c.S_StyleId直接用==比较。

针对你要匹配int[]类型的StyleIds和string类型的S_StyleId的需求,我给你两种实用的实现方案:

方案1:将int转为string直接比较(简单直接)

只需要修正ToString的调用方式,加上括号执行方法拿到字符串结果,再和S_StyleId做比较:

var cs = optionalEquipments.FirstOrDefault(d => 
    d.StyleIds.Any(s => s.ToString() == c.S_StyleId)
);

⚠️ 注意:这种方式需要确保S_StyleId的格式和int.ToString()的输出完全一致(比如没有前导零、多余空格之类的差异),否则会出现匹配不上的情况。

方案2:将string转为int比较(更安全推荐)

其实更稳妥的方式是把string类型的S_StyleId转成int,再和StyleIds里的int值直接匹配——这样能避免字符串格式差异带来的坑(比如S_StyleId是" 123 "带空格,转int时可以自动忽略,而转string比较就会不匹配)。

推荐用int.TryParse来做安全转换,避免转换失败抛出异常:

if (int.TryParse(c.S_StyleId, out int targetStyleId))
{
    var cs = optionalEquipments.FirstOrDefault(d => 
        d.StyleIds.Contains(targetStyleId)
    );
    // 这里处理找到的匹配项cs
}
else
{
    // 处理S_StyleId不是有效整数的情况,比如给个提示或者设置默认值
}

这种方式的优势:

  • 类型匹配更严谨,从根源上避免字符串格式的问题
  • 使用Contains比Any(s => s == ...)的写法更简洁高效

如果你的S_StyleId是多id逗号分隔的格式,那还需要先拆分字符串再转成int数组,再判断两个数组是否有交集,但从你的代码来看应该是单个id的场景,上面的方案完全够用啦。

内容的提问来源于stack exchange,提问作者venalyn sudaria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:31:59