C#索引和长度必须引用字符串中的位置

时间:2012-10-09 05:01:20

标签: c# .net

在运行下面显示程序错误 **

  

未处理的异常: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 个答案:

答案 0 :(得分:8)

你在这一行上做错了

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

你在这里做的是,创建一个比你的第一个字符串msg2的大小更长的子串msg1

此处,您的msg1.Length等于30而您的size等于58表示您正在尝试创建包含startingIndex = 30和{{1}的字符串在这种情况下这是不可能的,因为第二个字符串Length = 58的长度为msg1,而且小于30

Albin Sunnanbo根据您的要求回答很好.i.e。

Size i.e. 58

答案 1 :(得分:6)

更改

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

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

答案 2 :(得分:0)

msg2 = input.Substring(msg1.Length)

答案 3 :(得分:0)

您可以更改单行msg2 = input.Substring(msg1.Length,size);

使用

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);