所以我试图通过
从INT
而不是INT NOT NULL
列中检索值
AnswerVal = !dataReader.IsDBNull(5) ? dataReader.GetInt32(5) : null
其中AnswerVal
的类型为int?
,我收到了编译时错误
条件表达式的类型无法确定,因为 'int'和null
之间没有隐式转换
知道这里出了什么问题吗?
是的,我看过SQL Data Reader - handling Null column values,我不明白我做错了什么,因为我的内联if / else等同于那里的答案。
答案 0 :(得分:3)
您可以通过这种方式获得价值:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div class="curationPanel">INSIDE THE PANEL<div class="curationErrors"></div></div>
</body>
</html>
int? AnswerVal = !dataReader.IsDBNull(5) ? dataReader.GetInt32(5) : (int?)null;
和int
之间没有隐式转换,但null
和int
之间存在隐式转换,使用int?
识别类型那个空的。
当然,当列被定义为非空时,您真的不需要这样的检查。
答案 1 :(得分:1)
根据MSDN
条件必须评估为真或假。如果条件为真, first_expression被评估并成为结果。如果条件是 false,second_expression被评估并成为结果。只有一个 评估两个表达式。 两者的类型 first_expression和second_expression必须相同或 an 隐式转换必须存在于一种类型之间。
在您的情况下,true语句和false语句具有不同的类型,因此您需要转换它们。正如上面回答中提到的Reza。所以片段将是:
AnswerVal = !dataReader.IsDBNull(5) ? dataReader.GetInt32(5) : (int?)null;