如何区分未分配的公共int属性新实例对象与指定的实例对象

时间:2014-10-05 15:51:25

标签: c# reflection properties unassigned-variable

让我们有一个带有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,但我需要能够区分它们。怎么样?

1 个答案:

答案 0 :(得分: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; } }
}