JetBrains Rider 2025.2 Help

代码检查:结构体缺少 'IEquatable' 实现(非私有可访问性)

此检查建议结构体需要实现 IEquatable<T> 接口,以提高性能并减少在泛型上下文中比较此结构体实例时的内存开销。 仅当结构体重写了相等成员,并且它(或其包含类型,例如记录)实际用于相等比较时,才会发出警告。

在这种情况下,实现 IEquatable<T> 将带来以下好处:

  • 减少内存消耗:当在未实现 IEquatable<T> 的结构体上调用 Equals() 时,运行时会将值类型 结构体 转换为引用类型 对象 ,这涉及装箱操作——在堆上创建一个新对象以保存值和必要的元数据。

    在实现 IEquatable<T> 后,结构体的实例将直接使用 Equals(T other)Equals(object obj) 的自定义实现进行比较,而无需将结构体转换为对象。

  • 更好的性能:实现 IEquatable<T> 可以在使用相等比较的集合(如 List<T>Dictionary<TKey , TValue> )中带来更好的性能。 由于 IEquatable<T>.Equals(T other) 直接处理值类型,与结构体的 Equals(object) 相比,它更快。

作为快速修复,JetBrains Rider 帮助您调用 相等成员生成对话框 ,从而帮助为您的结构体实现 IEquatable<T>

最后修改日期: 2025年 9月 26日