2016-07-08 15 views
10

Tôi thường xuyên muốn lấy tên của một đặc tính cá thể của một loại, khi tôi không có cá thể nào. Hiện nay để làm được điều này, tôi sử dụng các chức năng trong nhà sau đó giải thích các tham số Expression[Func[T, object]] và trả về tên thuộc tính:Có thể C# tên của tài sản ví dụ tham chiếu toán tử không có cá thể không?

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

Tuy nhiên có vẻ như một sự xấu hổ không sử dụng được xây dựng trong nameof điều hành.

Thật không may có vẻ như toán tử nameof yêu cầu một cá thể hoặc tham chiếu đến một thuộc tính tĩnh.

Có cách nào gọn gàng để sử dụng toán tử nameof thay vì chức năng trong nhà của chúng tôi không? Ví dụ:

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

EDIT

tôi là hoàn toàn sai, cú pháp nameof(ClientService.EndDate) như mô tả thực sự hoạt động như vậy.

+1

Nó chỉ hoạt động - 'class C {public int P {get; }} '-' nameof (C.P) 'biên dịch tốt. –

Trả lời

25

Từ the documentation:

Trong ví dụ bạn thấy rằng bạn có thể sử dụng một tên loại và truy cập vào một tên phương pháp dụ. Bạn không cần phải có một thể hiện của loại & hellip; [nhấn mạnh mỏ]

I.e. bạn sẽ có thể viết nameof(ClientService.EndDate) và làm cho nó hoạt động, trái với tuyên bố của bạn trong câu hỏi rằng đây sẽ là "không bình thường cú pháp hợp lệ".

Nếu bạn gặp sự cố với cú pháp, vui lòng cung cấp một số Minimal, Complete, and Verifiable code example tốt để tái tạo một cách đáng tin cậy bất kỳ lỗi nào bạn nhận được và cung cấp văn bản chính xác của thông báo lỗi.

+1

Bạn nói đúng. Tôi đã có một loạt các bộ não. –

+3

Điều đáng nói đến là điều này không hiển thị trong IntelliSense (như của bản cập nhật VS2015 3) –

+0

@MatthewSteeples: True. Bất kỳ cách giải quyết nào cho vấn đề này? – DarkKnight

0

Câu trả lời hay của @Peter Duniho.

Trong trường hợp xảy ra xung đột tên, bạn cũng có thể làm như sau:

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

Không hiệu quả, nhưng cũng đủ tò mò.

Các vấn đề liên quan