【问题标题】:Suspicious warning from Resharper - should I change my code?来自 Resharper 的可疑警告 - 我应该更改我的代码吗?
【发布时间】:2012-09-06 22:47:21
【问题描述】:

使用以下代码:

if (lombardiTrophy.Substring(1, 1).Equals('~'))

...我明白了,“可疑的比较:解决方案中没有类型继承自 'string' 和 'char'

有没有更好的方法来做到这一点,不会导致 Resharper 惹恼它?

【问题讨论】:

  • .Equals("~") 注意双引号
  • 单引号尝试字符,双引号强制字符串,如果我没记错的话。
  • 但它编译得很好,1个字符的字符串是一个字符,对吧?
  • @ClayShannon 不,1 个字符的字符串仍然是 string,不同的类型。
  • @ClayShannon 它编译得很好,因为它编译为object.Equals(object),并且由于类型不同,该方法将始终返回 false。重申一下,表达式"A".Equals('A') 是假的。毫无疑问,您现在已经明白了这一点,但没有其他人明确要求注意这一事实,这就是 ReSharper 警告背后的原因。

标签: c# refactoring resharper automated-refactoring


【解决方案1】:

您应该注意 ReSharper 的警告 - Substring 返回一个字符串,而单引号表示法是一个字符,因此您正在比较两种不同的类型。您应该将 char 与 char 进行比较,您可以这样做:

if (lombardiTrophy[1].Equals('~'))

当然你要确保你的字符串至少有两个字符长。

【讨论】:

  • @bugnuker 他收到错误的原因是 '~' 是一个字符,而 Substring 返回一个字符串。由于他只需要一个字符,他应该使用返回一个字符的索引器 ([])。这样,他将 char 与 char 进行比较,而不是将 string 与 char 进行比较。
【解决方案2】:

试试这个:

 if (lombardiTrophy.Substring(1, 1).Contains("~"))

注意字符串比较的双引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多