输入字符串格式错误不正确

时间:2013-12-05 11:37:03

标签: c# .net

我不知道为什么有人告诉我这个错误

 long? Max = row["MAX"].ToString() != null || row["MAX"].ToString() != "" ? long.Parse(row["MAX"].ToString()) : (long?)null;

4 个答案:

答案 0 :(得分:1)

如果您的目的是检查row["MAX"]null,那么您应该将该检查更改为:

row["MAX"] != null

这是因为ToString()的返回值永远不会是null,但如果您在NullReferenceException对象上调用null,那么它会抛出row["MAX"].ToString()null null个对象将失败。

在您的情况下,它不是long? Max = (row["MAX"] != null && row["MAX"].ToString() != "") ? long.Parse(row["MAX"].ToString()) : (long?)null; ,但它是一个空字符串,您可能更改为:

long? Max = null;
if (row["MAX"] != null && row["MAX"].ToString() != "")
    Max = Long.Parse(row["MAX"].ToString());

但是你可以看到它不是真的可读,我会改变(跳过任何其他验证):

object

编辑正如Jota WA's answer(我认为正确)中所指出的,如果您的行object来自数据库(实际上我们不知道它的类型,所以我们可以只是猜测并假设它是DBNull.Value的字典,你可能有null而不是row["MAX"] != null。在这种情况下,falserow["MAX"].ToString() != "",但第二次检查null会捕获此条件。如果这是你的情况,并且你确定词典不包含任何真正的 if (row["MAX"].ToString() != "") 值,那么你可以更简单:

if (row["MAX"] != DBValue.Null)

甚至:

TryParse

我想您可能需要添加验证,然后您应该像这样使用// Here you may handle row["MAX"] == null case, if it may happen string MaxText = row["MAX"].ToString(); long? Max = null; if (MaxText != "") { long value; if (long.TryParse(MaxText, out value)) { // You may add more validation here, for example // to check value's range Max = value; } }

{{1}}

答案 1 :(得分:0)

您需要同时检查Empty Stringnull

在检查null时,您无法调用ToString(),就好像值为null throws NullReferenceException

试试这个:

long? Max = (row["MAX"] != null && !String.IsNullOrEmpty(row["MAX"].ToString()))? long.Parse(row["MAX"].ToString()) : (long?)null;

答案 2 :(得分:-1)

这是:

long? val;
long parsedVal;
if (long.TryParse(row["MAX"].ToString(), out parsedVal))
{
   val = null;
}
else
{
   val = parsedVal;
}

答案 3 :(得分:-1)

我认为你因row["MAX"].ToString() != null而收到错误。 如果row [“MAX”]为null,则ToString()方法将抛出异常。将其更改为仅行[“MAX”]!= null(如果是来自DB的空值,则使用DBNull.Value)。

P.S:你不需要使用(long?)null,因为类型“long?”已经支持null。