正确处理空值

时间:2013-02-04 14:27:42

标签: c# asp.net .net null

我有以下代码 -

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

这发生在已更改的事件上。

但是我的代码在这一行上打破 -

Input string was not in a correct format.

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

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

9 个答案:

答案 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的值