关于在引用(Visual Studio 或 ReSharper)上使用 == 的警告
Warning on == used on references (Visual Studio or ReSharper)
根据 ==
运算符在 MSDN 中的文档,
For reference types other than string, == returns true if its two operands refer to the same object.
但是,老实说,我从不检查两个引用是否与 ==
相同。
我更喜欢使用 ReferenceEquals(obj1, obj2)
并且 Equals
函数的默认覆盖也是如此。
因此,在我的项目中,当==操作符被用在string以外的其他类型上时,等于是一个bug。
当 == 用于引用(除了字符串)时,有没有办法通过 Visual Studio 或 ReSharper 触发 warning/error?
这不是全局解决方案,但如果我们只想考虑一些 类,JetBrains.Annotations
中的 CannotApplyEqualityOperatorAttribute
就可以了。
[CannotApplyEqualityOperator]
public sealed class NonEquatable { }
public sealed class OtherClass
{
public bool DoForbiddenStuff()
{
var obj1 = new NonEquatable();
var obj2 = new NonEquatable();
// ERROR! 'Cannot apply equality operator to type marked by CannotApplyEqualityOperatorAttribute'
return obj1 == obj2;
}
}
仍在等待查看是否有更通用的替代方案。
按照建议,我创建了一个扩展程序来执行此操作。
如果您有兴趣,这里是 link 到 extension 市场。
这是 link 到 source code。
目前它不会检查对象是否有运算符“==”和“!=”的覆盖。非常欢迎任何想贡献的人。
根据 ==
运算符在 MSDN 中的文档,
For reference types other than string, == returns true if its two operands refer to the same object.
但是,老实说,我从不检查两个引用是否与 ==
相同。
我更喜欢使用 ReferenceEquals(obj1, obj2)
并且 Equals
函数的默认覆盖也是如此。
因此,在我的项目中,当==操作符被用在string以外的其他类型上时,等于是一个bug。
当 == 用于引用(除了字符串)时,有没有办法通过 Visual Studio 或 ReSharper 触发 warning/error?
这不是全局解决方案,但如果我们只想考虑一些 类,JetBrains.Annotations
中的 CannotApplyEqualityOperatorAttribute
就可以了。
[CannotApplyEqualityOperator]
public sealed class NonEquatable { }
public sealed class OtherClass
{
public bool DoForbiddenStuff()
{
var obj1 = new NonEquatable();
var obj2 = new NonEquatable();
// ERROR! 'Cannot apply equality operator to type marked by CannotApplyEqualityOperatorAttribute'
return obj1 == obj2;
}
}
仍在等待查看是否有更通用的替代方案。
按照建议,我创建了一个扩展程序来执行此操作。
如果您有兴趣,这里是 link 到 extension 市场。
这是 link 到 source code。
目前它不会检查对象是否有运算符“==”和“!=”的覆盖。非常欢迎任何想贡献的人。