2
我正在使用一些运行SQL查询作为参考的旧代码。c#Object obj的值是{}。什么是 ”{}”?
在某些时候,它得到的东西,如:
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
投射解决了这个问题。
然后当int类型为没有条目为obj[fieldName]
时出现另一个问题。当我通过调试器时,惊奇地发现obj
不是null
。在VS中,鼠标悬停显示它的值为{}
。
到底是什么{}
?我如何对它进行布尔测试?
(在旧的代码,它出现在这种情况下返回.ToString()
和""
按预期方式工作。)
而且'obj == Object.Empty'测试没有'Object.Empty'吗?或者我可以创建一个'Object comparableEmpty = new Object()'? – Kache 2010-10-20 22:00:28
不,因为'Object'是一个引用类型,这意味着如果它存在,比较Object.Empty到你自己的对象将永远是错误的。您可以使用'myObj.GetType().GetProperties()。Count == 0'或其一些变体,尽管开销可能不值得。 – 2010-10-20 22:03:22
感觉有点愚蠢如何没有一个优雅的解决方案。如果它是一个引用类型,引用应该只是'null',就像一个很好的引用。 – Kache 2010-10-20 22:06:38