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获取额外信息,甚至包括大多数程序员可能永远不会有好的理由使用的内容。:)