2011-07-18 31 views
0

如何在獲取存取器塊正在運行時獲取當前屬性值? 我試圖解決一些這樣的:獲取存取器中的當前屬性值

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
public DateTime? birthDate 
{ 
    get 
    { 
     return CommonClass.GetDT(birthDate); 
    } 
    set 
    { 
     birthDate = CommonClass.GetDT(value); 
    } 
} 

public class CommonClass 
{  
    public static DateTime? GetDT(DateTime v) 
    { 
     if (v == DateTime.MinValue) 
     { 
      return null; 
     } 
     else 
     { 
      return v; 
     } 
    } 
    public static DateTime? GetDT(DateTime? v) 
    { 
     if (!v.HasValue) 
     { 
      return null; 
     } 
     else 
     { 
      return v; 
     } 
    } 
} 

但這種代碼被壓碎了。但是,如果你看看微軟的教程,你可以看到一些樣品,允許使用自己的屬性值:

public string Name 
{ 
    get 
    { 
     return name != null ? name : "NA"; 
    } 
} 

Here

回答

4

變量和方法名稱區分大小寫,這意味着「名稱」和「名稱」是不同的。

private string name; // the name field 
public string Name // the Name property 
{ 
    get 
    { 
     return name; 
    } 
} 

因此改變你對

private DateTime? birthDate 
public DateTime? BirthDate 
{ 
    get 
    { 
     return CommonClass.GetDT(birthDate); 
    } 
    set 
    { 
     birthDate = CommonClass.GetDT(value); 
    } 
} 
+0

完美!如此簡單優雅的解決方案!非常感謝! – kseen

1

屬性的get和set訪問只是方法。他們相當於: -

public string get_Name() 
{ 
    ... 
} 

public void set_Name(string value) 
{ 
    ... 
} 

一旦你認爲他們是這樣的,你可以看到他們沒有什麼特別的。沒有特殊的「自我」或「當前價值」。

在第二個代碼示例中,必須有一個名爲'name'的字段,用於存儲該屬性的值。這一點,而不是別的,是財產的「現值」。

+0

呀,亞當,我明白了。但後來我嘗試使用我的第一個代碼示例,它似乎陷入無限循環試圖一次又一次地獲取birthdate的值(我的意思是這行'返回CommonClass.GetDT(birthDate);')。結果它得到堆棧溢出異常錯誤。謝謝! – kseen

+0

@Adam:'get_Name()' –

+0

@Jalal:謝謝,編輯 –