这是一个初学者的问题,但我正在看的代码是在生产中,我不想破坏任何东西。所以,以防万一:是不是子串长度
text.Substring(index, length).Length
仅相当于length
?
(除潜在ArgumentOutOfRangeException。)
这是一个初学者的问题,但我正在看的代码是在生产中,我不想破坏任何东西。所以,以防万一:是不是子串长度
text.Substring(index, length).Length
仅相当于length
?
(除潜在ArgumentOutOfRangeException。)
看起来像我这样。我看不出任何写这样的理由。
我自己想的唯一解释是作者(尽管是经验丰富的)来自C++背景。它们可能在多字节编码方面存在问题,因此避免了手动计算。 – Nickolodeon
@Nickolodeon - 即使在这种情况下,它没有任何意义。 'Substring'和'Length'对多个*字符*进行操作,而不是多个*字节*。多字节在这里没有任何作用,我也看不到在C++中类似的情况。 – Polynomial
我只是vaguealy记得C++中的字符串确实是一个char []。字符反过来(至少,以前是)一个字节。 – Nickolodeon
让我们来看看实际的一些数字是指:
“我的常规测试字符串” .Substring(0,2)。长度==“我的”。长度= 2
“我的常规测试字符串“.Substring(4,2).Length ==”ro“= 2
正如您所说,如果startIndex + Length>字符串的长度或startIndex不在字符串中,则会抛出ArgumentOutOfRangeException
所以是的,因为所有潜在的其他情况都会引发异常。
我怀疑是笔者不知道边缘情况(当startIndex + length>字符串末尾)时会抛出异常。
在我们的案例中,索引始终> = 0,并且在开头添加了一个检查字符串不是空的。 – Nickolodeon
不要打折例外的价值。 –
这些都没有尝试。我想有一个超出范围的假设决不会发生。 – Nickolodeon
把它放在一个try块中会破坏这个值。这个假设并不是说它从不发生,而是如果它确实发生,它不会造成麻烦。 –