2016-07-08 52 views
10

當我沒有實例時,我經常想獲取某個類型的實例屬性的名稱。目前要做到這一點,我用下面的室內功能,它解釋Expression[Func[T, object]]參數和返回屬性名稱:Can C#nameof操作符引用實例屬性沒有實例嗎?

var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate); 
// Now str == "EndDate" 

但是它似乎是一個恥辱不使用內置的nameof運營商。

不幸的是,似乎nameof運算符需要一個實例或引用一個靜態屬性。

有沒有一種簡潔的方式來使用nameof運營商,而不是我們的內部功能?例如:

nameof(ClientService.EndDate) // ClientService.EndDate not normally syntactically valid as EndDate is instance member 

編輯

我是完全錯誤的,因爲描述的語法nameof(ClientService.EndDate)實際工作原樣。

+1

它只是工作 - 'class C {public int P {get; (C.P)''''''編譯得很好。 –

回答

25

the documentation

在你看到你可以使用一個類型名稱和訪問實例方法名的例子。你不需要有一個&hellip類型的實例; [重點礦]

也就是說,您應該能夠編寫nameof(ClientService.EndDate)並使其起作用,這與您在「通常不在語法上有效」這一問題中的說法相反。

如果您有語法問題,請提供一個良好的Minimal, Complete, and Verifiable code example可靠地再現您收到任何錯誤,並提供確切的文本的錯誤信息。

+1

你說得對。我有一系列的頭腦。 –

+3

值得一提的是,這並沒有顯示在智能感知中(反正VS2015更新3) –

+0

@MatthewSteeples:沒錯。任何解決方法? – DarkKnight

0

@Peter Duniho很好的回答。

在名稱衝突的情況下,你也可以做到以下幾點:

ClientService clientservice; 
var str = nameof(clientservice.EndDate); 

效率不高,但足夠的好奇心。

相關問題