为什么我得到这个例外?

时间:2012-11-13 07:30:50

标签: c# winforms exception

我正在尝试通过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);
        }
    }
 }

虽然相同的逻辑与控制台应用程序完美配合。我知道我缺少非常基本的东西,但目前我已经没有想法了。

5 个答案:

答案 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