我不知道为什么有人告诉我这个错误
long? Max = row["MAX"].ToString() != null || row["MAX"].ToString() != "" ? long.Parse(row["MAX"].ToString()) : (long?)null;
答案 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
。在这种情况下,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;
}
}
:
{{1}}
答案 1 :(得分:0)
您需要同时检查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;
答案 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。