C# 引用上使用的==警告(Visual Studio或ReSharper)
根据中C# 引用上使用的==警告(Visual Studio或ReSharper),c#,visual-studio,reference,resharper,equality,C#,Visual Studio,Reference,Resharper,Equality,根据中==操作员的文档 对于字符串以外的引用类型,==如果其两个操作数引用同一对象,则返回true 但是,老实说,我从来不会用==检查两个引用是否相同 我更喜欢使用ReferenceEquals(obj1,obj2)以及Equals函数的默认覆盖 因此,在我的项目中,当==运算符用于字符串以外的其他类型时,等于一个bug 是否有一种方法可以在VisualStudio或ReSurpar上使用一个警告来触发警告/错误(除了字符串之外)?< /P> < P>这不是一个全局的解决方案,但是如果我们只考虑
==
操作员的文档
对于字符串以外的引用类型,==如果其两个操作数引用同一对象,则返回true
但是,老实说,我从来不会用==
检查两个引用是否相同我更喜欢使用
ReferenceEquals(obj1,obj2)
以及Equals
函数的默认覆盖
因此,在我的项目中,当==运算符用于字符串以外的其他类型时,等于一个bug
是否有一种方法可以在VisualStudio或ReSurpar上使用一个警告来触发警告/错误(除了字符串之外)?< /P> < P>这不是一个全局的解决方案,但是如果我们只考虑一些类,<代码> CANNOPPLAYAULATION操作程序属性< /代码>在<代码> JeWord中。注释< /代码>有诀窍。
[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;
}
}
仍在等待,看看是否有更通用的替代方案。正如建议的那样,我创建了一个扩展来实现这一点 如果您感兴趣,这里是指向市场中的链接。
这里是链接到
此时,它不会检查对象是否具有对运算符“==”和“!=”的覆盖。欢迎任何想捐款的人捐款。您可以感谢@Crowcoder,这似乎是一个可行的解决方案。但让我惊讶的是,现在还没有什么东西可以解决这个问题。分析工具就是解决这个问题的工具。VisualStudio和resharper使用它们来提供该功能。但是如果对象覆盖了equals方法呢?那么分析器也可以检测到吗?