0

以下の実行時にプログラムエラーが表示されます**

未処理の例外:systemArgumentOutofRange:インデックスと長さは文字列内の場所を参照する必要があります。

****

string input = "OneTwoThree sdfhguiosdrb asdhfuiaserthf aseiryaseuigraweui";           

int size = input.Length;
if (input.Length > 30)
{
    msg1 = input.Substring(0, 30);
    msg2 = input.Substring(msg1.Length, size);
    Console.WriteLine("Message: {0}", msg1);
    Console.WriteLine("\nMessage: {0}", msg2);
}
else
    Console.WriteLine(input);

私が間違っていることを助けてください。

4

4 に答える 4

8

あなたはこの行で間違っています

msg2 = input.Substring(msg1.Length, size);

msg2ここで行っているのは、最初の文字列のサイズよりも長い部分文字列を作成することですmsg1

ここで、msg1.Lengthequals30sizeequalsは、と58を持つ文字列を作成しようとしていることを意味します。2番目の文字列の長さはであり、それよりも短いため、この条件ではこれは不可能です。startingIndex = 30Length = 58msg130Size i.e. 58

Albin Sunnanboの回答は、要件に応じて適切です。

msg2 = input.Substring(msg1.Length, size - msg1.Length);
于 2012-10-09T05:10:18.323 に答える
6

変化する

msg2 = input.Substring(msg1.Length, size);

msg2 = input.Substring(msg1.Length, size - msg1.Length);
于 2012-10-09T05:04:01.527 に答える
0
msg2 = input.Substring(msg1.Length)
于 2012-10-09T05:13:47.357 に答える
0

msg2 = input.Substring(msg1.Length、size);の1行を変更できます。

とともに

msg2 = input.Substring(0, size);
msg2 = msg2.Remove(0, msg1.Length);

そして問題は解決されます。

string input = "OneTwoThree sdfhguiosdrb asdhfuiaserthf aseiryaseuigraweui";
        int size = input.Length;
        if (input.Length > 30)
        {
            string msg1;
            string msg2;
            msg1 = input.Substring(0, 30);
            **msg2 = input.Substring(0, size);**
            **msg2 = msg2.Remove(0, msg1.Length);**
            Console.WriteLine("Message: {0}", msg1);
            Console.WriteLine("\nMessage: {0}", msg2);
        }
        else
            Console.WriteLine(input);
于 2012-10-09T08:02:24.050 に答える