-1

采取以下措施:

obj myVar;

obj myVar = null;

这两者之间有实际区别吗?它们都被抓住了(myVar == null)吗?

4

4 回答 4

6

你的答案在你的问题中。 obj != null意思是“对象存在”。

然而,这几乎始终是正确的。==and运算符的自定义覆盖可以更改此功能,因此绝对可以确保在所有!=情况下都可以使用!Object.ReferenceEquals(obj,null)来确保对象确实存在。

您得到的错误是System.NullReferenceException, 并且将始终通过此检查避免。

于 2013-04-26T13:25:35.170 回答
3

简短但甜蜜的答案是:支票(object != null)总是阻止object not set to an instance

于 2013-04-26T13:24:58.697 回答
1

值得一提

如果您正在从数据库中读取对象,如下面的代码片段所示:

private object GetItem(DataSet dataSet1, string tableName, int row, int col) {
  object obj = null;
  try {
    obj = dataSet1.Tables[tableName].Rows[row][col];
  } catch (Exception err) {
    Console.WriteLine(err.Message);
  }
  return obj;
}

返回的值可以是null(如果捕获到异常)或者DBNull.Value如果dataSet1.Tables[tableName].Rows[row][col]没有在数据库中设置。

但是,如果您忽略了初始化对象 obj,如下例所示:

private object Test2(DataSet dataSet1) {
  object obj;
  try {
    obj = dataSet1.Tables[0].Rows[0][0];
  } catch (Exception err) {
    Console.WriteLine(err.Message);
  }
  return obj;
}

该代码将无法在 Visual Studio 下编译。

截屏

于 2013-12-03T14:27:24.060 回答
0

那是一样的。如果一个对象没有被设置为一个对象的实例,它就没有对任何东西的引用,换句话说,就是null

于 2013-04-26T13:25:06.327 回答