2014-10-05 40 views
0

一個未分配公共整型屬性的新實例對象讓我們有一個簡單的類與一個int屬性如何者區分從分配的一個

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

我實例化兩次分配敏或不

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,但我需要能夠differenciate他們。怎麼樣?

回答

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

我已經糾正了SimpleClass並把敏作爲property.Thanks。使用int?似乎沒有適應,因爲SimpleClass的目標是數據庫模型。需要考慮將其明確地置爲null,但我只是意識到我使用諸如字段之類的屬性。第二種可能性是一些開銷,因爲我定位了許多屬性。 – tit 2014-10-05 16:12:38

+0

@ thipages:我不確定你的意思是「我使用諸如域這樣的屬性」。說實話,你的要求是什麼並不明確 - 而且他們當然也不清楚這個問題 - 但是*一般來說*已經被設置爲該類型的默認值的屬性和一直沒有設置。 – 2014-10-05 16:17:43

+0

「我使用類似字段的屬性」,我的意思是我聲明public myInt {get; set;}並在我的代碼中使用它,因爲它被聲明爲public int myInt; 「但總的來說沒有什麼區別......」回答我的問題。 – tit 2014-10-05 16:25:03

相關問題