区分用户输入“0”或将TextBox留空的情况

时间:2012-11-15 08:58:07

标签: c# asp.net type-conversion

问题标题可能不是自我解释,所以让我继续并详细阐述。

考虑一下, TextBox 只接受数字值或保留为空。输入的值(文本)存储在整数( int32 )变量中。当用户输入数字0或将 TextBox 留空时会出现问题,因为从字符串到int的转换也会将空字符串转换为“0”。

所以我的问题是如何区分这两种情况?

编辑我认为很多问题可以通过代码和确切问题(,因为我看到)来解答

    if (txtOtherId.Text == string.Empty)
    {
        otherId = Convert.ToInt32(null);
    }
    else
    {
        otherId = Convert.ToInt32(txtOtherId.Text);
    }

5 个答案:

答案 0 :(得分:2)

扩展方法怎么样?

public static class Extensions
{
  public static bool TryGetInt(this TextBox tb, out int value)
  {
    int i;
    bool parsed = int.TryParse(tb.Text, out i);
    value = i;

    return parsed;
  }
}  

用法:

int i;

if (textBox1.TryGetInt(out i))
{
    MessageBox.Show(i.ToString());
}
else
{
    // no integer entered
}

答案 1 :(得分:1)

您可以使用nullable int,然后将空字符串设为空。

int? myValue = String.IsNullOrEmpty(myTextbox.Text) 
        ? (int?)null 
        : int.Parse(myTextbox.Text);

为清楚起见,上述内容相当于

int? myValue = null;
if(!String.IsNullOrEmpty(myTextbox.Text))
{
    myValue = int.Parse(myTextbox.Text);
}

答案 2 :(得分:1)

你有什么尝试?我们能看到您的代码吗?

现在,尝试了以下内容:

int i;
i = Convert.ToInt32("");  // throws, doesn't give zero
i = int.Parse("");         // throws, doesn't give zero
bool couldParse = int.TryParse("", out i);   // makes i=0 but signals that the parse failed

所以我无法重现。但是,如果我使用null代替"",则Convert.ToInt32会转换为零(0)。但是,ParseTryParse仍然以null失败。

更新:

现在我看到了你的代码。请考虑将otherId的类型从int更改为 int? ,其中问号使其成为可以为空的类型。然后:

if (txtOtherId.Text == "")
{
    otherId = null;  // that's null of type int?
}
else
{
    otherId = Convert.ToInt32(txtOtherId.Text);   // will throw if Text is (empty again or) invalid
}

如果您想确保不会发生异常,请执行以下操作:

int tmp; // temporary variable
if (int.TryParse(txtOtherId.Text, out tmp))
    otherId = tmp;
else
    otherId = null;   // that's null of type int?; happens for all invalid input

答案 3 :(得分:0)

假设它确实是一个文本框......

string result = myTextBox.Text;

if (string.IsNullOrEmpty(result))
    // This is an empty textbox
else
    // It has a number in it.
    int i = int.Parse(result);

答案 4 :(得分:0)

有两种简单的方法:

string inputText="";

int? i=null;
if (!string.IsNullOrWhiteSpace(inputText))
i = int.Parse(inputText);

int i2;
bool ok = int.TryParse(inputText, out i2);