1

我有以下代码 -

int lat = System.Convert.ToInt16(latTextBox1.Text);

这发生在更改的事件上。

但是我的代码在这条线上打破了 -

Input string was not in a correct format.

其中latTextBox1.Text=""是一个空字符串。我认为这是破坏性的,因为它无法将空字符串转换为空值。

如何修改我的代码以考虑空值?

4

9 回答 9

4

好的,根据您的评论,您可以使用:

int? lat = string.IsNullOrEmpty(latTextBox1.Text) 
               ? (int?)null : Convert.ToInt32(latTextBox1.Text);

int?是一个可为空的 int。

于 2013-02-04T14:31:22.113 回答
3

好吧,并不是Convert.ToInt16要将空字符串转换为空值……事实上它不能,因为返回类型是不可为空的(又名)。Int16short

我怀疑您实际上想要更多类似的东西:

int lat;
if (int.TryParse(latTextBox1.Text, out lat))
{
    // Use lat
}
else
{
    // Invalid or empty input. Handle appropriately.
}

如果您想以与无效输入不同的方式处理空字符串,则需要明确地执行此操作 - 尽管您还应该考虑“仅空格”是否等同于“空”或“无效”。

于 2013-02-04T14:31:35.530 回答
3

一个简单的怎么样:

int? lat = null;
int dummyLat;
if (Int32.TryParse(latTextBox1.Text, out dummyLat)
    lat = dummyLat;

附带说明:
从来没有TextChanged事件中转换字符串!为什么?因为它会在每次按键时触发一个事件!使用其他触发器来启动转换(例如按钮)。

于 2013-02-04T14:31:40.600 回答
1

在尝试将其转换为整数之前,您应该首先检查当前值不是空值,请查看以下代码片段 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

注意:纬度和经度值应存储在精度数据类型中以保持精度。

于 2013-02-04T14:30:47.927 回答
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

于 2013-02-04T14:31:19.790 回答
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
}
于 2013-02-04T14:31:06.467 回答
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
}

可能是一种更好的方法,因为它可以处理非数字输入。

于 2013-02-04T14:31:14.953 回答
0
int i = 0;

if (!Int32.TryParse(latTextBox1.Text, out i)) {

    i = 0; // or default value;
}
于 2013-02-04T14:33:02.610 回答
-1

一个班轮:

int lat = System.Convert.ToInt16(latTextBox1.Text.Length == 0 ? 0 : latTextBox1.Text);

基本上像合并一样工作,如果 latTextBox1.Text 没有值,则将其设置为零,否则来自 latTextBox1.Text 的值

于 2013-02-04T14:33:40.343 回答