c# - C# 中 Substring 的意外行为

标签 c# .net string substring clr

<分区>

.net System.String类中Substring()方法的定义是这样的

public string Substring(int startIndex)

根据方法定义,startIndex“此实例中子字符串的从零开始的起始字符位置”。如果我理解正确,这意味着它会给我一部分字符串,从给定的从零开始的索引开始。

现在,如果我有一个字符串 "ABC" 并采用具有不同索引的子字符串,我会得到以下结果。

var str = "ABC";
var chars = str.ToArray(); //returns 3 char 'A', 'B', 'C' as expected

var sub2 = str.Substring(2); //[1] returns "C" as expected
var sub3 = str.Substring(3); //[2] returns "" ...!!! Why no exception??
var sub4 = str.Substring(4); //[3] throws ArgumentOutOfRangeException as expected

为什么它不为 case [2] 抛出异常?

字符串有3个字符,所以索引是[0, 1, 2],甚至是ToArray(), ToCharArray()方法按预期返回 3 个字符!如果我尝试 Substring() 起始索引 3,它不应该抛出异常吗?

最佳答案

documentation非常明确这是正确的行为:

Return value: a string that is equivalent to the substring that begins at startIndex in this instance, or Empty if startIndex is equal to the length of this instance.

Throws ArgumentOutOfRangeException if startIndex is less than zero or *greater than the length of this instance. *

换句话说,从最后一个字符开始的子字符串将得到一个空字符串。

您认为它会为您提供字符串的部分 的评论与此并不矛盾。 “字符串的一部分”也包括所有零长度子串的集合,s.substring(n, 0) 给出一个空字符串。

关于c# - C# 中 Substring 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906320/

相关文章:

c# - ASP.NET Core - 搜索栏结果在 View 中返回 null

c# - 异常,在 WinRT 中加载文件后

c# - 你如何遍历多维数组?

c# - .Net core IHostedService后台任务异常不会终止应用

c# - Math.Pow 的最佳实践

c - 根据 C 中的几个设置词拆分字符串的最简单方法

c# - 繁忙指示器未显示在 wpf 窗口中

javascript - 生成包含 jquery 的网页

java - 字符串无法转换为 java 错误

java - 如何在Java中读取一行的第一个元素/术语?