我正在开发的c#程序检查用户输入的第一个字符,如果它以.
(点)开头,我想在用户写的时候用安抚的字符串替换用户输入的每个字符,但是我收到了错误
索引越界异常
我的代码:
if (textBox1.Text.StartWith(".")) {
string MyText = "Hello World";
int x = 0;
string NewText;
while (x <= MyText.Length) {
NewText = textBox1.Text.Replace(textBox1.Text[x], MyText[x]);
TextBox1.Text = NewText;
x++;
}
}
答案 0 :(得分:3)
你超越了字符串的边界,替换:
while (x <= MyText.Length) {
与
while (x < MyText.Length) {
答案 1 :(得分:2)
while(x < MyText.Length)
或
while(x <= MyText.Length - 1)
如果数组的长度= x,则其最后一个索引是x-1,因为数组从0索引
开始答案 2 :(得分:1)
如果我理解你的权利(没有相关的样本),我建议使用 Linq 这是不可能的;尝试使用模块化arimethics - index % MyText.Length
来避免索引问题
string source = ".My Secret Message for Test";
string MyText = "Hello World";
// If user input starts with dot
if (source.StartsWith("."))
source = string.Concat(source
.Select((c, index) => MyText[index % MyText.Length]));
TextBox1.Text = source;
结果:
Hello WorldHello WorldHello
答案 3 :(得分:0)
首先,@ Daniell89说:
使用
while(x < MyText.Length)
其次: 您不仅将x用作MyText的索引,还将其用作textBox1.Text的索引。所以你需要检查它是否足够长。
你可以这样做:
while (x < Math.Min(MyText.Length, textBox1.Text.Length)
{
NewText = textBox1.Text.Replace(textBox1.Text[x], MyText[x]);
TextBox1.Text = NewText;
x++;
}
但我觉得在这里使用for语言会更好。