升级.NET7后Roslyn项目中用SymbolEqualityComparer修复RS1024错误
解决RS1024错误:用SymbolEqualityComparer实现GetHashCode
Roslyn的符号对象(比如TypeSymbol)的相等性判断依赖语义相等而非引用相等,直接用System.HashCode.Combine计算哈希码会不符合Roslyn的符号比较规则,因此触发RS1024警告。
修正方法是直接使用SymbolEqualityComparer来生成哈希码,替换原有的HashCode.Combine实现:
原代码:
public int GetHashCode([DisallowNull] TypeSymbolMetaType? obj) => System.HashCode.Combine(obj.TypeSymbol);
修正后代码:
public int GetHashCode([DisallowNull] TypeSymbolMetaType? obj) => SymbolEqualityComparer.Default.GetHashCode(obj.TypeSymbol);
补充说明
- 如果需要忽略符号的大小写差异(比如处理标识符大小写不敏感的场景),可以改用
SymbolEqualityComparer.IgnoreCase - 由于参数标注了
[DisallowNull],确保obj和obj.TypeSymbol不会为null,若存在null风险可自行添加空值检查逻辑
内容的提问来源于stack exchange,提问作者userahd
相关产品推荐
相关产品推荐

