我想知道为什么静态代码分析(VS 2015)在使用String.Equals(string)时不会导致错误。所以
"file".Equals("FILE")
不会导致代码分析错误,而
String.Compare("file", "FILE", true)
会导致CA 1307错误。
此规则的文档在MSDN
上显示许多字符串操作,最重要的是Compare和 Equals 方法,提供了一个接受StringComparison枚举值作为参数的重载。
每当存在一个带有StringComparison参数的重载时,应该使用它而不是不带此参数的重载。通过明确设置此参数,您的代码通常会更清晰,更易于维护。
从此我可以预期第一个例子会导致CA 1307错误。
因此,在这种情况下不抛出错误在某些情况下可能非常危险,并导致“错误”的应用程序。
我在这里错过了什么吗?
如果这是设计的,有什么办法可以达到预期的行为吗?
答案 0 :(得分:1)
您传递布尔值的比较方法,而比较函数需要StringComparison枚举值。
String.Compare("file", "FILE", StringComparison.InvariantCultureIgnoreCase);
这应该返回一个真实的回应,因为你忽略了大小写。