我有以下代码 -
int lat = System.Convert.ToInt16(latTextBox1.Text);
这发生在已更改的事件上。
但是我的代码在这一行上打破 -
Input string was not in a correct format.
latTextBox1.Text
= ""
这是一个空字符串。
我认为这是打破的,因为它无法将空字符串转换为空值。
如何修改我的代码以考虑空值?
答案 0 :(得分:3)
好的,根据您的评论,您可以使用:
int? lat = string.IsNullOrEmpty(latTextBox1.Text)
? (int?)null : Convert.ToInt32(latTextBox1.Text);
int?
是一个可以为空的int。
答案 1 :(得分:3)
好吧,Convert.ToInt16
不是意味着将空字符串转换为空值...实际上它不能,因为返回类型是不可为空的{ {1}}(又名Int16
)。
我怀疑你真的想要更像的东西:
short
如果要以无效输入的方式处理空字符串,则需要明确地执行此操作 - 尽管您还应该考虑“只是空格”是否等同于“空”或“无效”。
答案 2 :(得分:3)
如何简单:
int? lat = null;
int dummyLat;
if (Int32.TryParse(latTextBox1.Text, out dummyLat)
lat = dummyLat;
旁注:
我从不转换TextChanged
事件中的字符串!为什么?因为它会在每次按键时触发事件!使用其他触发器启动转换(例如按钮)。
答案 3 :(得分:1)
在尝试将当前值转换为整数之前,首先应检查当前值是否为空值,请查看以下代码段 int lat = 0;
If(! string.IsNullorEmpty(latTextBox1.Text))
{
lat = System.Convert.ToInt32(latTextBox1.Text);
}
// use your lat variable here
<强>更新强>
从上面的评论中,lat
可能会保留NULL
值,因此您必须将其设为可为空的Int才能使其保持值NULL
考虑这个更新的代码段 诠释? lat = 0;
If(! string.IsNullorEmpty(latTextBox1.Text))
{
lat.value = System.Convert.ToInt32(latTextBox1.Text);
}
// use your lat variable here by accessing the lat.value property
注意:latiture和longtitude值应存储在 double 数据类型中,以保持精度。
答案 4 :(得分:1)
您可以使用以下方法:
Int16.TryParse
:
或者你可以在执行逻辑之前检查字符串是否为空或空:
if (!string.IsNullOrEmpty(latTextBox1.Text)) {
lat = System.Convert.ToInt16(latTextBox1.Text);
}
http://msdn.microsoft.com/en-us/library/system.int16.tryparse.aspx
答案 5 :(得分:0)
int lat = 0;
if (Int32.TryParse(laTextBox1.Text, out lat))
{
//success, textbox contained an int, now lat has the value of that int
}
else
{
//failure, textbox did not contain an int
}
答案 6 :(得分:0)
您必须检查正在设置的字符串:
int lat = 0;
if (string.IsNullOrEmpty(latTextBox1.Text)
{
// Your null case here
}
else
{
lat = System.Convert.ToInt16(latTextBox1.Text);
}
虽然:
int lat = 0;
if (!Int32.TryParse(latTextBox1.Text, out lat)
{
// Error handling here
}
可能是一种更好的方法,因为它可以处理非数字输入。
答案 7 :(得分:0)
int i = 0;
if (!Int32.TryParse(latTextBox1.Text, out i)) {
i = 0; // or default value;
}
答案 8 :(得分:-1)
一个班轮:
int lat = System.Convert.ToInt16(latTextBox1.Text.Length == 0 ? 0 : latTextBox1.Text);
基本上像coalesce一样工作,如果latTextBox1.Text没有值,则将其设置为零 否则来自latTextBox1.Text的值