我正在尝试通过Windows窗体反转字符串,但出于任何原因for
循环在我执行代码时发出异常。
System.NullReferenceException:对象引用未设置为对象的实例
Button_Click事件
string input=textBox1.Text;
input=Convert.ToString(Console.ReadLine());
string output="";
if(textBox1.Text=="")
{
MessageBox.Show("Sorry! You have not given any input for perform action");
}
else
{
try{
for(int i=input.Length-1; i>=0; i--)
{
output= output+input[i];
}
textBox2.Text=output;
}
catch(Exception ex)
{
MessageBox.Show(""+ex);
}
}
}
虽然相同的逻辑与控制台应用程序完美配合。我知道我缺少非常基本的东西,但目前我已经没有想法了。
答案 0 :(得分:13)
在winform中,Console.ReadLine()
会返回null
(因为没有控制台)。同样,Convert.ToString((string)null)
会返回null
。而且您无法在.Length
上致电for
(在null
中)。关键代码:
input=Convert.ToString(Console.ReadLine());
...
for(int i=input.Length-1; i>=0; i--)
另外,作为一个小问题:通过连接构建字符串是非常低效的。
答案 1 :(得分:2)
马克正确地指出了你的错误。但是我也重构了你的代码(据我所知你想把反向输入放到textBox2中):
string input = textBox1.Text;
if(String.IsNullOrWhiteSpace(input))
{
MessageBox.Show("Sorry! You have not given any input for perform action");
return;
}
textBox2.Text = new String(input.Reverse().ToArray());
答案 2 :(得分:1)
我认为应该是:
output += input[i];
这样做的一个简单方法就是这个方法
public static string ReverseString(string s)
{
char[] arr = s.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
答案 3 :(得分:0)
input
可能没有值或者可能只有一个元素但是你试图通过input[1]
访问它,这意味着它的第二个元素会给你NullPointer异常
output= output+input[1]; //I guess you did this by mistake
应该是这样的。
for(int i=input.Length-1; i>=0; i--)
{
output= output+input[i]; //Change '1' with 'i'
}
希望这能解决问题。
答案 4 :(得分:0)
为什么在WinForms中使用Console
函数?
你的问题出在这一行,导致其他即将发生的错误。
input=Convert.ToString(Console.ReadLine());
以这种方式改变:
string input=textBox1.Text;
input=Convert.ToString(input); //However i don't think you even require this line