[英]input string was not in the correct format error
我不知道为什么会发生此错误,谁能告诉我
long? Max = row["MAX"].ToString() != null || row["MAX"].ToString() != "" ? long.Parse(row["MAX"].ToString()) : (long?)null;
如果您要检查row["MAX"]
是否为null
,则应将该检查更改为:
row["MAX"] != null
这是因为ToString()
返回值永远不会为null
但是如果在null
对象上调用它,则会抛出NullReferenceException
(然后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
来自数据库(实际上我们不知道它的类型,因此我们可以猜测并假设它是object
的字典),那么Jota WA的答案 (我认为是正确的)中指出的EDIT可能就是DBNull.Value
而不是null
。 在这种情况下, row["MAX"] != null
为false
但是第二个检查row["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;
}
}
您需要检查Empty String
和null
。
在检查null
您无法调用ToString()
,因为该值为null
会throws
NullReferenceException
。
尝试这个:
long? Max = (row["MAX"] != null && !String.IsNullOrEmpty(row["MAX"].ToString()))? long.Parse(row["MAX"].ToString()) : (long?)null;
这里是:
long? val;
long parsedVal;
if (long.TryParse(row["MAX"].ToString(), out parsedVal))
{
val = null;
}
else
{
val = parsedVal;
}
我相信您会因为row["MAX"].ToString() != null
出错。 如果row [“ MAX”]为null,则ToString()方法将引发异常。将其更改为仅row [“ MAX”]!= null(如果是数据库中的null值,请改用DBNull.Value)。
PS:您不需要使用(long?)null,因为类型为“ long?” 已经支持null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.