0

让我们有一个带有 int 属性的简单类

    public class SimpleClass {
      public int myInt { get; set; }// for having a property and not "public int myInt;", see Jon Skeet remark
    }

我实例化它两次分配 myInt 与否

    assignedObject = new SimpleClass() { myInt=0};
    notAssignedObject = new SimpleClass();

现在通过反思,我在每种情况下使用查询 myInt 的值

    Object value;
    value=assignedObject.GetType().GetProperties().Where(o=>o.Name.Equals("myInt")).First().GetValue(assignedObject,null)
    value=notAssignedObject.GetType().GetProperties().Where(o=>o.Name.Equals("myInt")).First().GetValue(notAssignedObject,null)

对于 myInt,我得到了两倍的 0,但我需要能够区分它们。如何?

4

1 回答 1

3

除非您有代码专门记​​住已使用其默认值初始化的属性与根本未设置的属性之间的区别,否则您无法区分。不过,我有两个建议:

  • 您可以将其设为int?属性,然后检查该值是否为null. 当然null,除非您禁止这样做,否则可以将其显式设置为,但它可能已经足够好了。
  • 您可以保留一个单独的bool值以了解它是否已明确设置,并将其与值一起设置在您的属性设置器中。

第二个选项的示例代码:

public class SimpleClass
{
    private int value;
    private bool valueSet;

    public int Value
    {
        get { return value; }
        set
        {
            this.value = value;
            this.valueSet = true;
        }
    }

    public bool ValueSet { get { return valueSet; } }
}
于 2014-10-05T15:56:17.117 回答