2011-01-05 38 views

Trả lời

5

Thuộc tính là siêu dữ liệu được áp dụng cho các thành viên thuộc loại, loại chính nó, thông số phương pháp hoặc lắp ráp. Để bạn có thể có quyền truy cập vào các siêu dữ liệu, bạn phải có các thành viên ban đầu bản thân để sử dụng GetCustomAttributes vv, tức là bạn thể hiện của Type, PropertyInfo, FieldInfo, vv

Trong trường hợp của bạn, tôi sẽ thực sự vượt qua tên của tài sản đối với thuộc tính:

public CustomAttribute : Attribute 
{ 
    public CustomAttribute(string propertyName) 
    { 
    this.PropertyName = propertyName; 
    } 

    public string PropertyName { get; private set; } 
} 

public class MyClass 
{ 
    [Custom("MyProperty")] 
    public int MyProperty { get; set; } 
} 
+5

Cảm ơn tôi biết điều này có thể được giải quyết bằng cách đi qua bất động sản có tên tuổi, tôi sẽ làm điều này mà không đi sở hữu tên . Vì vậy, dựa trên phản ứng của bạn, điều đó là không thể. – Sadegh

+0

Không thể, các thuộc tính không được chuyển thông tin về các thành viên mà chúng được đính kèm. Điều gì sẽ thuận tiện là nếu cá thể 'Attribute' được thông qua' ICustomAttributeProvider' được sử dụng để tạo ra nó, nhưng đáng buồn là đây không phải là trường hợp. –

+0

Cảm ơn Matthew rất hữu ích. – Sadegh

0

bạn không thể làm điều đó trong chính lớp thuộc tính. tuy nhiên, bạn có thể có một phương thức lấy đối tượng nhận danh sách thuộc tính của đối tượng đó (nếu có) sử dụng thuộc tính. sử dụng API này để thực hiện điều đó: http://msdn.microsoft.com/en-us/library/ms130869.aspx

+0

OK Tôi biết có nhiều cách (giống như cách tiếp cận của bạn), nhưng không có trường hợp nào trong số đó là trường hợp của tôi. – Sadegh

95

Sử dụng CallerMemberNameAttribute từ .NET 4.5:

public CustomAttribute([CallerMemberName] string propertyName = null) 
{ 
    // ... 
} 
+1

Tuyệt vời. Lưu một tham số cho thuộc tính mà tôi sẽ phải sử dụng để trang trí các thuộc tính trên toàn bộ dự án. – Ellesedil

+6

Đây phải là câu trả lời được chấp nhận, cảm ơn người đàn ông! –

+1

Đã tìm kiếm điều này nhưng không hoạt động [với enums] (http://stackoverflow.com/q/28094024/465942) thật không may .. –

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