c#Object obj的值为{}.什么是 "{}"?

Kac*_*che 2 c# sql null object

我正在使用一些运行SQL查询的旧代码作为参考.

在某些时候,它会变成如下:

sqlDataAdapter.Fill(dataSet);
DataRow dataRow = dataSet.Tables[0].Rows[0];
Object obj = dataRow[fieldName];
Run Code Online (Sandbox Code Playgroud)

旧代码确实:

string output;
if (!string.IsNullOrEmpty(obj.ToString())) { output = obj.ToString(); }
else { output = "Not Available"; }
Run Code Online (Sandbox Code Playgroud)

我改为:

output = obj as string ?? "Not Available"
Run Code Online (Sandbox Code Playgroud)

但有时,它破了.正如我所怀疑的那样,当条目是一个时,它正在发生int.int在那些案件中铸造解决了这个问题.

然后,当没有obj[fieldName] int类型的条目时,出现了另一个问题.当我走过调试器时,我惊讶地发现那obj不是null.在VS中,鼠标移除显示它有一个价值{}.

到底是{}什么?我如何对它进行布尔测试?

(在旧代码中,它会在这种情况下.ToString()返回""并按预期工作.)

Nat*_*ley 5

{并且}打开和关闭大括号并且象征着对象的开始和结束.因此,没有特殊属性的空对象以简写形式描述{}.调试器使用此表示法来帮助您在视觉上区分空对象,空字符串和null.

如果你将鼠标悬停在obj[fieldName]没有条目fieldName,调试器将不关心它,它将显示值obj.你必须使用即时窗口或手表/速表.调试器只会看到你将鼠标悬停在obj上,并假设你指的是数组本身,而不是指定索引处数组的内容.

  • 我已经弄清楚我需要做什么了。`obj.getType().Equals(System.DBNull.Value)`。在我的问题中,我说当条目为空时,我需要一个布尔值来处理控制流。 (2认同)