2010-06-03 49 views
8

這個問題是相關但不一樣的是:How do you give a C# Auto-Property a default value?在C#中,我可以讓自動屬性在屬性的幫助下執行一些額外的工作嗎?

我愛自動性,但有時我不得不做這樣的事情:

private string someName; 

public string SomeName 
{ 
    get 
    { 
     return someName; 
    } 

    set 
    { 
     someName = value.Trim(); 
    } 
} 

如果我必須做同樣的事情很多次,我開始希望我不需要輸入太多的代碼行/字符。我希望能夠攔截這個值並改變它的排列方式:

public string Somename 
{ 
    get; 

    [Trim] 
    set; 
} 

有沒有辦法做這樣的事情?它會愚蠢嗎?有沒有更好的辦法?任何其他一般性評論?我承認,我給出的例子有點假設,我現在找不到確切的代碼,這讓我想到了這一點。

謝謝。

回答

4

你可以使用AOP來做到這一點,就像Postsharp一樣,但爲什麼你不是在這種情況下使用後備存儲?

而且,完整性,你應該這樣做:

someName = (value ?? string.Empty).Trim(); 

處理null爲好。

請注意,如果你腦子裏哪裏有更多的工作,涉及到具體的情況下,你應該問這種情況下,而不是小事一樁,你在你的問題有

+0

感謝,並微軟沒有提供它自己的面向方面編程的解決方案? – 2010-06-03 22:40:07

+0

在一定程度上,它的ContextBound對象,但它不是一個很好的解決方案,大多數AOP實現。現在IL織工在這方面的表現要好得多,並且可以與任何類型的對象一起工作,而使用Microsoft方法則必須從普通類繼承。 – 2010-06-03 22:45:12

+0

等一下,「IL織布工」是將句法糖擴展成不同代碼的東西?是否類似'使用<=> try/finally',代碼契約魔法?我認爲在一個IL編織器中的一個bug會有點難以追蹤,因爲它可能會讓調試器混淆。 – 2010-06-03 22:53:35

5

不,沒有辦法做到這一點。 C#自動屬性是爲了只是最微不足道的屬性的語法糖而已,僅此而已。

相關問題