问题标题可能不是自我解释,所以让我继续并详细阐述。
考虑一下, TextBox 只接受数字值或保留为空。输入的值(文本)存储在整数( int32 )变量中。当用户输入数字0或将 TextBox 留空时会出现问题,因为从字符串到int的转换也会将空字符串转换为“0”。
所以我的问题是:如何区分这两种情况?
编辑我认为很多问题可以通过代码和确切问题(,因为我看到)来解答
if (txtOtherId.Text == string.Empty)
{
otherId = Convert.ToInt32(null);
}
else
{
otherId = Convert.ToInt32(txtOtherId.Text);
}
答案 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
)。但是,Parse
和TryParse
仍然以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);