2016-12-30 13 views
0
を見つけるの例外ArgumentOutOfRangeExceptionを取得

clines[i]の長さは、私が初期化されている69 あるindex = 50はなぜサブ

コード:

今、私はしかし、私は例外

の下に取得しています 69 にインデックス 50から部分たい
string substr = clines[i].Substring(index, clines[i].Length); 

Argume ntOutOfRangeException:インデックスと長さは、文字列内の位置 を参照する必要があります。パラメータ名:長さ

なぜこの例外が発生していますか?

+2

'サブストリング 'は'(from、to) 'ではありません。それは '(from、howmany)'です。この質問を作成するのではなく、実際のドキュメンテーションを読むことがあなたに答えている可能性があります。 – Bauss

答えて

5

あなたのコード内のエラーの直接の原因は、index + clines[i].Lengthclines[i].Lengthであり、あなたはすべての非ゼロindexのエラーを持っているつもりだ理由です実際の文字列の長さを超えてはならないということです。

最後の引数(あなたは、サブストリングが最後までindexから始まる取得したい場合)ドロップをお試しください:編集

string substr = clines[i].Substring(index); 

を: A(長ったらしい)代替と2つの引数は

string substr = clines[i].Substring(index, clines[i].Length - index); 

です。最後に引数は部分文字列の長さで、元の長さではありません。

+1

@gvmani: '.Substring(index、clines [i] .Length-index);' –

+0

string substr = clines [i] .Substring(index);これはうまくいった。しかし、最後のインデックスを渡す必要はないsubstring()で質問がありますか?どうして? –

+1

@Surabhi Pandey: 'string substr = clines [i] .Substring(index、clines [i] .Length - index);'と書くこともできますが、派生メソッドのオーバーロードがあるときに最後の引数を気にするのはなぜですか? .Netは '' Index'から始まり最後まで 'を意味する 'Substrting(index)'メソッドを提供しているので、なぜそれを使わないのですか? –

1

C#では、2番目の引数はセグメントの長さを表し、セグメントの拡張先のインデックスではありません。

また、文字列の正しい部分が必要な場合は、2番目のパラメータをそのまま使用することができます。

clines[i].Substring(50, 19); 
+0

ええ、今私はそれを得た。私はC#を初めて使っています。ありがとう。 –