Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 空声明中的差异_C# - Fatal编程技术网

C# 空声明中的差异

C# 空声明中的差异,c#,C#,采取以下行动: obj-myVar 及 obj myVar=null 这两者之间有实际区别吗?它们都被(myVar==null)捕获了吗?简短但甜蜜的回答是:检查(object!=null)总是防止对象未设置为实例这是同一回事。如果一个对象没有设置为对象的实例,它将没有任何引用,换句话说,它将是null 你的答案就在你的问题中对象!=null表示“对象存在” 然而,这几乎在所有时间都是正确的。==和的自定义覆盖=操作员可以更改此功能,因此绝对可以确保您可以使用!ReferenceEquals(o

采取以下行动:

obj-myVar

obj myVar=null


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

简短但甜蜜的回答是:检查
(object!=null)
总是防止
对象未设置为实例
这是同一回事。如果一个对象没有设置为对象的实例,它将没有任何引用,换句话说,它将是
null

你的答案就在你的问题中<代码>对象!=null
表示“对象存在”

然而,这几乎在所有时间都是正确的。
==
的自定义覆盖=操作员可以更改此功能,因此绝对可以确保您可以使用
!ReferenceEquals(obj,null)
以确保对象在所有情况下确实存在

您得到的错误是a,通过此检查将始终避免。

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

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]。数据库中未设置行[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下编译


你的问题对我来说毫无意义。你混淆了对象和引用<代码>obj
是一个参考,而不是一个对象。该检查确定了
obj.anything
都会抱怨“对象引用未设置为对象实例”的情况。请澄清。AFAIK没有像旧VB版本那样的全局错误对象(普通代码可以访问)。如果您的obj是
null
,并且您调用了它的函数或属性,那么您将得到错误。。。我不知道我是否听懂了你的话question@JefferyKhan:我认为OP正在寻找旧VB版本中的全局错误对象。请显示产生此错误的实际代码。+1获取额外信息,甚至包括大多数程序员可能永远不会有好的理由使用的内容。:)