2011-11-30 48 views
5

这是一个初学者的问题,但我正在看的代码是在生产中,我不想破坏任何东西。所以,以防万一:是不是子串长度

text.Substring(index, length).Length 

仅相当于length

(除潜在ArgumentOutOfRangeException。)

+1

不要打折例外的价值。 –

+0

这些都没有尝试。我想有一个超出范围的假设决不会发生。 – Nickolodeon

+0

把它放在一个try块中会破坏这个值。这个假设并不是说它从不发生,而是如果它确实发生,它不会造成麻烦。 –

回答

6

是的,这将是完全一样的。

+0

我总是太慢:( –

+0

我的手指今天好像闪电:] – Polynomial

+0

我刚刚得到了我的评论无处不在的特权。派对:-) – dash

1

看起来像我这样。我看不出任何写这样的理由。

+0

我自己想的唯一解释是作者(尽管是经验丰富的)来自C++背景。它们可能在多字节编码方面存在问题,因此避免了手动计算。 – Nickolodeon

+0

@Nickolodeon - 即使在这种情况下,它没有任何意义。 'Substring'和'Length'对多个*字符*进行操作,而不是多个*字节*。多字节在这里没有任何作用,我也看不到在C++中类似的情况。 – Polynomial

+0

我只是vaguealy记得C++中的字符串确实是一个char []。字符反过来(至少,以前是)一个字节。 – Nickolodeon

0

让我们来看看实际的一些数字是指:

“我的常规测试字符串” .Substring(0,2)。长度==“我的”。长度= 2

“我的常规测试字符串“.Substring(4,2).Length ==”ro“= 2

正如您所说,如果startIndex + Length>字符串的长度或startIndex不在字符串中,则会抛出ArgumentOutOfRangeException

所以是的,因为所有潜在的其他情况都会引发异常。

我怀疑是笔者不知道边缘情况(当startIndex + length>字符串末尾)时会抛出异常。

+0

在我们的案例中,索引始终> = 0,并且在开头添加了一个检查字符串不是空的。 – Nickolodeon