0

如果我有课

class widget {
    public int theNum;
    public string theName;
}

我像这样初始化

widget wgt = new widget { thename="tom" };

theNum将为零。

有没有办法让我检查实例 wgt 以确定成员 theNum 是默认的,即从对象初始化中排除?

4

3 回答 3

3

一种选择是theNum改为int?改为...然后默认值为空值,它不同于 0。

请注意,我希望那些是公共属性而不是公共字段 - 在这种情况下,您可以通过测试字段值是否为空来创建属性类型int,保持int?作为支持字段类型并提供一些其他检查初始化的方法.

于 2013-01-25T15:50:47.507 回答
3

只要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; }
    }
}
于 2013-01-25T15:50:19.840 回答
0

而不是int使用 an int?(这是 . 的简写,System.Nullable<int>然后,如果没有人将其初始化为有效的 int,则它将为 null。

于 2013-01-25T15:51:51.607 回答