我正在使用一些运行SQL查询的旧代码作为参考.
在某些时候,它会变成如下:
sqlDataAdapter.Fill(dataSet); DataRow dataRow = dataSet.Tables[0].Rows[0]; Object obj = dataRow[fieldName];
旧代码确实:
string output; if (!string.IsNullOrEmpty(obj.ToString())) { output = obj.ToString(); } else { output = "Not Available"; }
我改为:
output = obj as string ?? "Not Available"
但有时,它破了.正如我所怀疑的那样,当条目是一个时,它正在发生int
.int
在那些案件中铸造解决了这个问题.
然后,当没有obj[fieldName]
int类型的条目时,出现了另一个问题.当我走过调试器时,我惊讶地发现那obj
不是null
.在VS中,鼠标移除显示它有一个价值{}
.
到底是{}
什么?我如何对它进行布尔测试?
(在旧代码中,它会在这种情况下.ToString()
返回""
并按预期工作.)
{
并且}
打开和关闭大括号并且象征着对象的开始和结束.因此,没有特殊属性的空对象以简写形式描述{}
.调试器使用此表示法来帮助您在视觉上区分空对象,空字符串和null.
如果你将鼠标悬停在obj[fieldName]
没有条目fieldName
,调试器将不关心它,它将显示值obj
.你必须使用即时窗口或手表/速表.调试器只会看到你将鼠标悬停在obj上,并假设你指的是数组本身,而不是指定索引处数组的内容.