-1

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

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

4

5 回答 5

13

在 winform 中,Console.ReadLine()返回null(因为没有 console)。同样,Convert.ToString((string)null)返回null. 而且您不能.Lengthfor. null关键代码片段:

input=Convert.ToString(Console.ReadLine());
...
for(int i=input.Length-1; i>=0; i--)

另外,作为一个小问题:通过连接建立一个字符串是非常低效的。

于 2012-11-13T07:32:41.107 回答
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());
于 2012-11-13T07:41:53.583 回答
1

我认为应该是:

output += input[i];

一个简单的方法就是这个方法

public static string ReverseString(string s)
{
    char[] arr = s.ToCharArray();
    Array.Reverse(arr);
    return new string(arr);
}
于 2012-11-13T07:34:37.430 回答
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'
    }

希望这能解决问题。

于 2012-11-13T07:40:56.113 回答
0

Console为什么要在 WinForms中使用函数?您的问题出在这一行,这会导致其他即将发生的错误。

input=Convert.ToString(Console.ReadLine());

以这种方式更改它:

string input=textBox1.Text;
input=Convert.ToString(input); //However i don't think you even require this line
于 2012-11-13T07:46:05.507 回答