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
相关产品推荐
相关产品推荐

