C#跳过,如果不为null

时间:2014-10-17 03:30:35

标签: c# winforms int

我有一个click事件处理程序,它必须检查两个文本框是否为null,如果这两个文本框都没有给两个变量赋值并传递给另一个方法。

一个变量是String,另一个是整数。如果String为null但整数不是,那么它将正常工作(它不应该这样!)。但是,如果整数为null并且字符串不是,那么它将给出一个预期的错误,因为它不应该达到那个点。

以下是代码:

        private void btnInsert_Click(object sender, EventArgs e)
    {
        String ActorName;
        int Position;
        if ((txtPosition.Text != null))
        {
            if ((txtActorName.Text != null))
            {
                ActorName = txtActorName.Text;
                Position = int.Parse(txtPosition.Text);
                InsertIntoArrayList(ActorName, Position);
                PopulateActors();
            }
            else
            {
                MessageBox.Show("Please enter an Actor Name");
                return;
            }
        }
        else
        {
            MessageBox.Show("Please enter a position");
            return;
        }
    }

如您所见,如果txtPosition不为null,则它会测试txtActorName。如果其中一个为null,则抛出相关消息。假设两者都不为null,则将值分配给变量并将这些值传递给InsertIntoArrayLIst方法,然后调用PopulateActors方法。

如果我输入一个演员姓名和一个职位,一切正常。只有当我没有进入某个位置以至于错过了输入的事实,然后才会在Position = int.Parse(txtPosition.Text);行上滑,因为txtPosition为空。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:5)

尝试使用例如!string.IsNullOrEmpty(txtPosition.Text)代替txtPosition.Text != null

或者,只需使用txtPosition.Text != ""即可。毕竟,Text属性实际上永远不应为null。

当然,您应该对两个值txtPosition和txtActor应用相同的修复。

答案 1 :(得分:1)

  1. 不要混淆null和空字符串。它们不是一回事。
  2. 如果您明确将其设置为null,则任何控件的Text属性都只能为null。在大多数情况下,您根本不需要检查该属性;只是比较一个空字符串就足够了
  3. String.IsNullOrEmpty()String.IsNullOrWhitespace()方法是您的朋友。
  4. 没有理由嵌套If块。只需使用保护条款检查一个,然后检查另一个,以获得更清晰的代码:
  5.  private void btnInsert_Click(object sender, EventArgs e)
     {
    
        if (string.IsNullOrWhitespace(txtPosition.Text))
        {
            MessageBox.Show("Please enter a position");
            return; 
        }
        if (string.IsNullOrWhitespace(txtActorName.Text))
        {
            MessageBox.Show("Please enter an Actor Name");
            return;
        }
        int Position;
        if (!int.TryParse(txtPosition.Text, out Position))
        {
            MessageBox.Show("Please enter a number in the position field");
            return;
        }
    
        InsertIntoArrayList(txtActorName.Text, Position);
        PopulateActors();
    }
    

答案 2 :(得分:0)

如果您想检查空格,也可以使用if (!string.IsNullOrWhiteSpace(txtPosition.Text)。虽然性能方面比使用标准string.IsNullOrEmtpy

慢一点

if (txtPosition.Text != string.Empty)是另一种检查方式。

答案 3 :(得分:0)

试试这个,它可能会解决您的问题

ActorName = txtActorName.Text;

Position = int.Parse(txtPosition.Text ==“”?“0”:txtPosition.Text);