如何区分未分配的公共int属性新实例对象和已分配的实例对象



让我们有一个具有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)

我的Int得到了两次0,但我需要能够区分它们。怎样

除非你有代码专门记住已经用默认值初始化的属性和根本没有设置的属性之间的区别,否则你无法分辨区别。然而,我有两个建议:

  • 您可以将其设为int?属性,然后检查该值是否为null。当然,它可以明确地设置为null,除非您禁止,但这可能已经足够好了
  • 您可以保留一个单独的bool值来了解它是否已显式设置,只需在属性setter中设置它和值

第二个选项的示例代码:

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; } }
}

相关内容

  • 没有找到相关文章

最新更新