我一直收到错误
未处理的类型' System.ArgumentOutOfRangeException'发生在mscorlib.dll
在我的代码中输入超过70个字符的值时,有人可以解释一下原因吗?
namespace testingStrategiesCoding
{
class Program
{
static void Main(string[] args)
{
string userMessage;
int messageLength;
string newMessage1;
string newMessage2;
string newMessage3;
Console.WriteLine("Enter a message");
userMessage = Console.ReadLine();
messageLength = userMessage.Length;
if (messageLength < 71)
{
Console.WriteLine("");
Console.WriteLine(userMessage);
}
else if (messageLength > 70 && messageLength < 141)
{
newMessage1 = userMessage.Substring(0, 70);
newMessage2 = userMessage.Substring(71, messageLength);
Console.WriteLine("");
Console.WriteLine(newMessage1);
Console.WriteLine("");
Console.WriteLine(newMessage2);
}
else if (messageLength > 140 && messageLength < 211)
{
newMessage1 = userMessage.Substring(0, 70);
newMessage2 = userMessage.Substring(71, 140);
newMessage3 = userMessage.Substring(141, messageLength);
Console.WriteLine("");
Console.WriteLine(newMessage1);
Console.WriteLine("");
Console.WriteLine(newMessage2);
Console.WriteLine("");
Console.WriteLine(newMessage3);
}
else
{
Console.WriteLine("Invalid, please enter a message lower than 210 characters.");
}
Console.ReadKey();
}
}
}
我不认为这是重复的,因为错误是代码的一部分因素,没有其他线程似乎与之相关。
答案 0 :(得分:10)
Substring(71, messageLength)
第二个子串参数是长度,而不是结束索引。您需要减去start-index才能生效。此外,您可能希望从70
开始,或者丢失一个角色。
Substring(70, messageLength - 70)
答案 1 :(得分:0)
要完全避免此问题,请考虑使用MoreLINQ
&#39; Batch
(将字符串拆分为70个字符&#39;&#39; /&#39;批次&#39 ;)
这样做的好处是可以避免担心偏移等问题。
代码看起来像:
using System;
using MoreLinq;
namespace MattConsole
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter a message");
var userMessage = Console.ReadLine();
if (userMessage?.Length <= 210)
{
var batchedData = userMessage.Batch(70);
foreach (var entry in batchedData)
{
Console.WriteLine("");
var asString = string.Concat(entry);
Console.WriteLine(asString);
}
}
else
{
Console.WriteLine("Invalid, please enter a message lower than 210 characters.");
}
Console.ReadKey();
}
}
}