object.ToString()当object为null时的行为

时间:2017-06-16 12:26:03

标签: c# .net frameworks

我有以下用2.0框架编写的c#代码

SqlConnection mySqlConnection = new SqlConnection("Connection String");
mySqlConnection.Open();
SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
mySqlCommand.CommandText = "SELECT OutputType FROM Reports WHERE ReportID = 'NEWREP'";

return mySqlCommand.ExecuteScalar().ToString();

当没有sql查询的记录时,ExecuteScalar将返回null对象,并且能够通过ToString()将null对象转换为字符串。

没有抛出异常。

但是当针对.Net 4.0的相同代码时,抛出异常“对象引用未设置为对象的实例。”

我可以使用

return mySqlCommand.ExecuteScalar() as string;

return (string)mySqlCommand.ExecuteScalar();

处理4.0中的异常

但我想知道为什么2.0没有抛出异常?这种行为的任何线索?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果找不到匹配的数据,

ExecuteScalar将返回null。

如果object.ToString()NullReferenceException

object会抛出null。这与dot net框架版本无关。我怀疑你对框架2.0的观察是不正确的。

要处理空值,有多种方法。你已经说过其中两个了。

return Convert.ToString(mySqlCommand.ExecuteScalar());

修改您的评论

  

4.0代码和2.0都指向具有相同代码的相同SQL DB。我只有exe文件(2.0版本)所以无法调试它返回的值。但肯定没有抛出异常

这不仅仅是ToString(),这与C#或.NET无关。请注意,该方法正在object上调用。完整的通话声明为object.ToString()。如果objectnull,很明显无法访问ToString()成员,因此也是例外。 null实例上的任何成员访问都会在大多数不创建隐式实例的编程语言的任何版本中导致相同的异常。