0

好吧,问题标题可能无法自我解释,所以让我继续详细说明。

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

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

编辑我认为代码和确切问题可能会回答很多问题(如我所见

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

5 回答 5

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
}
于 2012-11-15T09:03:18.923 回答
1

您可以使用可为空的 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);
}
于 2012-11-15T09:01:10.850 回答
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)。但是,Parse仍然TryParse失败null

更新:

现在我看到了你的代码。考虑将otherIdfrom的类型更改intint?问号使其成为可为的类型。然后:

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
于 2012-11-15T09:18:33.290 回答
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);
于 2012-11-15T09:01:36.060 回答
0

有两种简单的方法可以做到这一点:

string inputText="";

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

int i2;
bool ok = int.TryParse(inputText, out i2);
于 2012-11-15T09:05:31.060 回答