我有以下代码 -
int lat = System.Convert.ToInt16(latTextBox1.Text);
这发生在更改的事件上。
但是我的代码在这条线上打破了 -
Input string was not in a correct format.
其中latTextBox1.Text
=""
是一个空字符串。我认为这是破坏性的,因为它无法将空字符串转换为空值。
如何修改我的代码以考虑空值?
好的,根据您的评论,您可以使用:
int? lat = string.IsNullOrEmpty(latTextBox1.Text)
? (int?)null : Convert.ToInt32(latTextBox1.Text);
int?
是一个可为空的 int。
好吧,并不是Convert.ToInt16
要将空字符串转换为空值……事实上它不能,因为返回类型是不可为空的(又名)。Int16
short
我怀疑您实际上想要更多类似的东西:
int lat;
if (int.TryParse(latTextBox1.Text, out lat))
{
// Use lat
}
else
{
// Invalid or empty input. Handle appropriately.
}
如果您想以与无效输入不同的方式处理空字符串,则需要明确地执行此操作 - 尽管您还应该考虑“仅空格”是否等同于“空”或“无效”。
一个简单的怎么样:
int? lat = null;
int dummyLat;
if (Int32.TryParse(latTextBox1.Text, out dummyLat)
lat = dummyLat;
附带说明:
我从来没有在TextChanged
事件中转换字符串!为什么?因为它会在每次按键时触发一个事件!使用其他触发器来启动转换(例如按钮)。
在尝试将其转换为整数之前,您应该首先检查当前值不是空值,请查看以下代码片段 int lat = 0;
If(! string.IsNullorEmpty(latTextBox1.Text))
{
lat = System.Convert.ToInt32(latTextBox1.Text);
}
// use your lat variable here
更新:
根据您上面的评论,lat
可能会保存该NULL
值,因此您必须将其设为可为空的 Int 才能使其保存值为 NULL
考虑这个更新的代码片段 int? 纬度 = 0;
If(! string.IsNullorEmpty(latTextBox1.Text))
{
lat.value = System.Convert.ToInt32(latTextBox1.Text);
}
// use your lat variable here by accessing the lat.value property
注意:纬度和经度值应存储在双精度数据类型中以保持精度。
您可以使用以下方法:
Int16.TryParse
:
或者您可以在执行逻辑之前检查字符串是否不为空或为空:
if (!string.IsNullOrEmpty(latTextBox1.Text)) {
lat = System.Convert.ToInt16(latTextBox1.Text);
}
http://msdn.microsoft.com/en-us/library/system.int16.tryparse.aspx
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
}
您必须检查正在设置的字符串:
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
}
可能是一种更好的方法,因为它可以处理非数字输入。
int i = 0;
if (!Int32.TryParse(latTextBox1.Text, out i)) {
i = 0; // or default value;
}
一个班轮:
int lat = System.Convert.ToInt16(latTextBox1.Text.Length == 0 ? 0 : latTextBox1.Text);
基本上像合并一样工作,如果 latTextBox1.Text 没有值,则将其设置为零,否则来自 latTextBox1.Text 的值