1. ホーム
  2. c#

[解決済み] 特定の属性をマークしたすべてのプロパティを取得する

2023-03-19 14:25:02

質問

クラスとプロパティがあります。いくつかのプロパティは、属性をマークすることができます(それは私の LocalizedDisplayName から継承している DisplayNameAttribute ). これは、クラスのすべてのプロパティを取得するためのメソッドです。

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

と書かれたリストボックスに、クラスのプロパティを追加したい。 LocalizedDisplayName と表示されたリストボックスにクラスのプロパティを追加し、リストボックスに属性の値を表示させたいです。どうすればいいでしょうか?

EDIT

これは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);
        }
    }  

リソースファイルから文字列を取得したい。 ありがとうございます。

どのように解決するのですか?

一番簡単なのは IsDefined :

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

値そのものを取得するためには

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