C# 正确处理空值

C# 正确处理空值,c#,asp.net,.net,null,C#,Asp.net,.net,Null,我有以下代码- int lat = System.Convert.ToInt16(latTextBox1.Text); 这发生在已更改的事件上 然而,我的代码在这行上被破坏了- Input string was not in a correct format. 其中latTextBox1.Text=”,为空字符串。 我认为这是破坏性的,因为它无法将空字符串转换为空值 如何修改代码以解释空值?在尝试将当前值转换为整数之前,应首先检查当前值是否为空值,请查看以下代码片段 int-lat=0

我有以下代码-

int lat = System.Convert.ToInt16(latTextBox1.Text);
这发生在已更改的事件上

然而,我的代码在这行上被破坏了-

Input string was not in a correct format.
其中
latTextBox1.Text
=
,为空字符串。 我认为这是破坏性的,因为它无法将空字符串转换为空值


如何修改代码以解释空值?

在尝试将当前值转换为整数之前,应首先检查当前值是否为空值,请查看以下代码片段 int-lat=0

  If(! string.IsNullorEmpty(latTextBox1.Text))
    {
     lat = System.Convert.ToInt32(latTextBox1.Text);
    }
// use your lat variable here
更新:

从上面的注释来看,
lat
可能包含
NULL
值,因此必须将其设置为可为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

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

在尝试将当前值转换为整数之前,应首先检查当前值是否为空值,请检查以下代码段
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))
    {
     lat = System.Convert.ToInt32(latTextBox1.Text);
    }
// use your lat variable here
更新:

从上面的注释来看,
lat
可能包含
NULL
值,因此必须将其设置为可为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

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

您必须检查正在设置的字符串:

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 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
}

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

您可以使用以下方法:

Int16.TryParse

或者,您可以在执行逻辑之前检查字符串是否为null或空:

if (!string.IsNullOrEmpty(latTextBox1.Text)) {
     lat = System.Convert.ToInt16(latTextBox1.Text);
}

您可以使用以下方法:

Int16.TryParse

或者,您可以在执行逻辑之前检查字符串是否为null或空:

if (!string.IsNullOrEmpty(latTextBox1.Text)) {
     lat = System.Convert.ToInt16(latTextBox1.Text);
}

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

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

int?
是可为空的int。

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

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

int?
是一个可为空的int。

嗯,
Convert.ToInt16
并不意味着将空字符串转换为空值。。。实际上它不能,因为返回类型是不可为空的
Int16
(aka
short

我怀疑你实际上想要的是:

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

如果您想将空字符串与无效输入进行不同的处理,则需要显式地执行该操作——尽管您还应该考虑“空白是否等于”“空”或“无效”。< /P> < P>好,<代码>转换。ToTut16//C>不意味着将空字符串转换为空值。实际上它不能,因为返回类型是不可为空的

Int16
(aka
short

我怀疑你实际上想要的是:

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

如果您想将空字符串与无效输入进行不同的处理,则需要显式地执行该操作——尽管您还应该考虑“空白是否等于”“空”或“无效”。

< P>如何简单:

int? lat = null;
int dummyLat;
if (Int32.TryParse(latTextBox1.Text, out dummyLat)
    lat = dummyLat;
旁注:
我从未在
TextChanged
事件中转换字符串!为什么?因为每次按键都会触发一个事件!使用其他触发器启动转换(例如按钮)。

简单的:

int? lat = null;
int dummyLat;
if (Int32.TryParse(latTextBox1.Text, out dummyLat)
    lat = dummyLat;
旁注:
我从未在
TextChanged
事件中转换字符串!为什么?因为每次按键都会触发一个事件!使用其他触发器启动转换(例如按钮)。

一行:

int lat = System.Convert.ToInt16(latTextBox1.Text.Length == 0 ? 0 : latTextBox1.Text);
基本上与coalesce类似,如果latTextBox1.Text没有值,请将其设置为零 否则,latTextBox1.Text中的值为一行:

int lat = System.Convert.ToInt16(latTextBox1.Text.Length == 0 ? 0 : latTextBox1.Text);
基本上与coalesce类似,如果latTextBox1.Text没有值,请将其设置为零
否则,如果
latTextBox1.Text

中的值为空,您希望
lat
中的值是什么?您也不是在调用
Convert.ToIn16
并将其分配给
int
-您应该使用
Convert.ToInt32
。在数据库中,它允许为null,因此null将是默认值,而不是零,因为lat实际上代表纬度,而“0”是一个有效的纬度值,因此必须为空。您可以使用客户端Valdiator来消除客户端的一组问题(当然您也需要服务器端验证,因为客户端验证可以忽略,但这需要一些技巧,而且很少发生,总之,使用
Int32.TryParse()
将字符串安全地转换为int)@sll:从上面的代码来看,这是一个windows应用程序,不是web@Jambo为什么要将纬度存储为
int
?不需要精确性吗?如果
latTextBox1.Text
为空,您希望
lat
是什么?您也不是在调用
Convert.ToIn16
并将其分配给
int
-您应该使用
Convert.ToInt32
。在数据库中,它允许为null,因此null将是默认值,而不是零,因为lat实际上代表纬度,而“0”是一个有效的纬度值,因此必须为空。您可以使用客户端Valdiator来消除客户端的一组问题(当然您也需要服务器端验证,因为客户端验证可以忽略,但这需要一些技巧,而且很少发生,总之,使用
Int32.TryParse()
将字符串安全地转换为int)@sll:从上面的代码来看,这是一个windows应用程序,不是web@Jambo为什么要将纬度存储为
int
?不需要精确性吗?不工作,因为
lat
在块内声明,因此不能在块外使用。此外,它将在
if
块中抛出编译器错误,因为