Nhận tất cả các thuộc tính đã đánh dấu thuộc tính nhất định


80

Tôi có lớp và tài sản trong đó. Một số thuộc tính có thể được đánh dấu thuộc tính (đó là thuộc tính của tôi LocalizedDisplayNamekế thừa từ DisplayNameAttribute). Đây là phương thức lấy tất cả các thuộc tính của lớp:

private void FillAttribute()
{
    Type type = typeof (NormDoc);
    PropertyInfo[] propertyInfos = type.GetProperties();
    foreach (var propertyInfo in propertyInfos)
    {
        ...
    }
}

Tôi muốn thêm các thuộc tính của lớp trong hộp danh sách được đánh dấu LocalizedDisplayNamevà hiển thị giá trị của thuộc tính trong hộp danh sách. Tôi có thể làm cái này như thế nào?

CHỈNH SỬA
Đây là LocalizedDisplayNameAttribute:

public class LocalizedDisplayNameAttribute : DisplayNameAttribute
    {
        public LocalizedDisplayNameAttribute(string resourceId)
            : base(GetMessageFromResource(resourceId))
        { }

        private static string GetMessageFromResource(string resourceId)
        {
            var test =Thread.CurrentThread.CurrentCulture;
            ResourceManager manager = new ResourceManager("EArchive.Data.Resources.DataResource", Assembly.GetExecutingAssembly());
            return manager.GetString(resourceId);
        }
    }  

Tôi muốn lấy chuỗi từ tệp tài nguyên. Cảm ơn.


"Giá trị của thuộc tính" là gì? Thuộc tính là các lớp và có thể có rất nhiều "giá trị" (thuộc tính / trường). Có lẽ bạn đang nói về kết quả từ ToString()? Bạn có thể chỉnh sửa câu hỏi của mình để thêm một số mã cho các thuộc tính tùy chỉnh mà bạn đang áp dụng và chỉ định dữ liệu nào bạn muốn tắt nó không?
Merlyn Morgan-Graham

Câu trả lời:


132

Nó có lẽ dễ sử dụng nhất IsDefined:

var properties = type.GetProperties()
    .Where(prop => prop.IsDefined(typeof(LocalizedDisplayNameAttribute), false));

Để tự nhận các giá trị, bạn sẽ sử dụng:

var attributes = (LocalizedDisplayNameAttribute[]) 
      prop.GetCustomAttributes(typeof(LocalizedDisplayNameAttribute), false);

7
+1; Nit-pick: Tôi sẽ chỉ định IEnumerable<PropertyInfo>ở đây :) Hữu ích nếu người nhìn thấy câu trả lời này không quen thuộc với Linq hoặc Reflections.
Merlyn Morgan-Graham
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.