如果我有课
class widget {
public int theNum;
public string theName;
}
我像这样初始化
widget wgt = new widget { thename="tom" };
theNum
将为零。
有没有办法让我检查实例 wgt 以确定成员 theNum 是默认的,即从对象初始化中排除?
如果我有课
class widget {
public int theNum;
public string theName;
}
我像这样初始化
widget wgt = new widget { thename="tom" };
theNum
将为零。
有没有办法让我检查实例 wgt 以确定成员 theNum 是默认的,即从对象初始化中排除?
一种选择是theNum
改为int?
改为...然后默认值为空值,它不同于 0。
请注意,我希望那些是公共属性而不是公共字段 - 在这种情况下,您可以通过测试字段值是否为空来创建属性类型int
,保持int?
作为支持字段类型并提供一些其他检查初始化的方法.
只要theNum
是一个字段,您就无法判断它是未初始化还是已显式初始化为其默认值(在这种情况下为0
,但如果您有 ,则可能会有所不同public int theNum = 42
)。
如果theNum
是一个属性,那么您可以从属性设置器中设置一个标志,该标志允许您确定是否调用了设置器,无论您将属性设置为什么值。例如:
class widget {
private int theNum;
private bool theNumWasSet;
public string theName;
public int TheNum
{
get { return theNum; }
set { theNumWasSet = true; theNum = value; }
}
}
而不是int
使用 an int?
(这是 . 的简写,System.Nullable<int>
然后,如果没有人将其初始化为有效的 int,则它将为 null。