C# string.LastIndexOf()错误?

C# string.LastIndexOf()错误?,c#,string,indexof,C#,String,Indexof,有人知道原因吗: " <exception>".LastIndexOf("<",0) returns -1 (wrong) ”.LastIndexOf(字符串,int32重载LastIndexOf表示,“报告此实例中指定Unicode字符最后一次出现的从零开始的索引位置。搜索从指定的字符位置开始,并向后搜索字符串的开头。” 因此,如果您传入0,它将只检查第一个字符,而不检查0中的整个字符串。您误解了LastIndexOf方法的特定重载 缔约国声明如下: 搜索从指定的字符位置

有人知道原因吗:

"  <exception>".LastIndexOf("<",0) returns -1 (wrong)

”.LastIndexOf(字符串,int32
重载
LastIndexOf
表示,“报告此实例中指定Unicode字符最后一次出现的从零开始的索引位置。搜索从指定的字符位置开始,并向后搜索字符串的开头。”


因此,如果您传入
0
,它将只检查第一个字符,而不检查
0

中的整个字符串。您误解了
LastIndexOf
方法的特定重载

缔约国声明如下:

搜索从指定的字符位置开始,向后搜索字符串的开头


请注意,它表示
向后
。因此,如果从位置
0
开始,则没有
“,这是因为第二个参数表示它应该从位置0开始,并从那里向字符串的开头看

仅当字符串位于字符串的开头,并且仅当您要查找一个字符长的字符串时,才能找到该字符串:

"<exception>".LastIndexOf("<",0)  // returns 0

"<exception>".LastIndexOf("<ex",0) // returns -1

“”.LastIndexOf(“我认为您误解了该方法


第二个参数是开始搜索的字符。如果从0位置的字符向后搜索,结果是正确的。

第二个参数的作用与您认为的不同:

LastIndex(char value, int startIndex)
startIndex是开始向后搜索字符串的字符,因此如果传递0,则只检查第一个字符

要从末尾检查整个字符串,必须传递字符串的长度-1

没关系 第一个表达式找到文档()的
,文档()表示:

搜索从该文件的startIndex字符位置开始 实例和向开始处向后进行,直到其中一个值 已找到或已检查第一个字符位置。有关 例如,如果startIndex的长度为-1,则该方法将每隔 从字符串中的最后一个字符到开头的字符

(我的重点)

因此:

"  <exception>".LastIndexOf("<",0)

“”。LastIndexOf(“这是一个错误,因为LastIndexOf**()**从指定位置向后搜索

请尝试以下代码:

"  <exception>".LastIndexOf("<", 5)
.LastIndexOf(“
  • haystack.LastIndexOf(“针”)
    在字符串中搜索最后出现的“针”字符串

  • 如果要搜索的值从未出现,则方法
    LastIndexOf
    IndexOf
    返回
    -1

  • LastIndexOf

    • 字符串的字符索引从
      0
      开始,从左到右递增

    • 当没有提供第二个参数时,这两种方法都假定偏移索引为
      0

  • 该函数也存在于as
    lastIndexOf

    • (注意:mixedcase或camelBack套管)并且在JavaScript中设置超出haystring长度边界的索引是可以的,但在C中,这将导致
      System.ArgumentOutOfRangeException:<0 | |>this.length
      异常
示例

"  <exception>".LastIndexOf("<", 3)
 //> returns 2
"  <exception>".LastIndexOf("<", "  <exception>".Length)
 //> returns 2
"  <exception>".LastIndexOf("<", "  <exception>".Length+1)
 //> ArgumentOutOfRangeException
"  <exception>".LastIndexOf("<", 2)
 //> returns 2
"  <exception>".LastIndexOf("<", -1)
 //> returns -1
"  <exception>".LastIndexOf("<", -2)
 //> ArgumentOutOfRangeException
"  <exception>".LastIndexOf("<", 1)
 //> returns -1

”.LastIndexOf(“啊,好的,非常感谢。我刚刚读了intellisense菜单中的描述,所以我不知道它是反向进行的。”)imo,一个更有趣的问题是,为什么那些人选择这样实现它。@antony.trupe这种方式你可以在找到第一个实例后停止。@antony.trupe:如果你仔细想想,这是唯一明智的方法。如果函数的目的是获取字符串最后一次出现的索引,那么就为w提供一个起始索引从中向前推进将是毫无意义的。好吧,现在有了upvotes,这肯定是我迄今为止写的最高估的答案。如果你想对答案进行upvote,请对作者在解决方案中考虑并解释了这些想法的答案进行upvote,而不仅仅是复制文档。
"  <exception>".LastIndexOf("<", 5)
"  <exception>".LastIndexOf("<", 3)
 //> returns 2
"  <exception>".LastIndexOf("<", "  <exception>".Length)
 //> returns 2
"  <exception>".LastIndexOf("<", "  <exception>".Length+1)
 //> ArgumentOutOfRangeException
"  <exception>".LastIndexOf("<", 2)
 //> returns 2
"  <exception>".LastIndexOf("<", -1)
 //> returns -1
"  <exception>".LastIndexOf("<", -2)
 //> ArgumentOutOfRangeException
"  <exception>".LastIndexOf("<", 1)
 //> returns -1