Как я могу получить каждое свойство класса, которое имеет пользовательский атрибут, а затем показать их в раскрывающемся списке? - PullRequest
4 голосов
/ 19 мая 2019

У меня есть класс с некоторыми свойствами, некоторые из них имеют собственные атрибуты, я хочу получить их и поместить в словарь, затем показать их в раскрывающемся списке, я попробовал некоторый код, но все еще есть некоторые проблемы ...

public class Constants
    {

    //FinancialVoucher
    [InCludeEventLog]
    private static readonly Guid financialVoucherEntityGuid = new Guid(0x83fd191f, 0x7bfe, 0x4050, 0xbb, 0xe8, 0x9d, 0x4e, 0x77, 0x66, 0xef, 0x2f); // {83FD191F-7BFE-4050-BBE8-9D4E7766EF2F}
    public static Guid FinancialVoucherEntityGuid
    {
      get { return financialVoucherEntityGuid; }
    }

    //CalculationCommandQueue
        private static readonly Guid calculationCommandQueueEntityGuid = new Guid(0xe4f847bc, 0xd65d, 0x4e41, 0x9c, 0xc8, 0x15, 0x65, 0x7b, 0xce, 0x8a, 0x5f);// {E4F847BC-D65D-4E41-9CC8-15657BCE8A5F}
        public static Guid CalculationCommandQueueEntityGuid
        {
            get { return calculationCommandQueueEntityGuid; }
        }

    //PayrollCalculationCommand
    [InCludeEventLog]
    private static readonly Guid payrollCalculationCommandEntityGuid = new Guid(0x50479cfe, 0xa9b4, 0x414b, 0xae, 0xfc, 0x0f, 0x6e, 0xee, 0x89, 0xfa, 0x5b); // {50479cfe-a9b4-414b-aefc-0f6eee89fa5b}
        public static Guid PayrollCalculationCommandEntityGuid
        {
            get { return payrollCalculationCommandEntityGuid; }
        }

///I've tried this:

Dictionary<Guid, string> keyValuePairs = new Dictionary<Guid, string>();
      Type type = typeof(Constants);
      foreach (var item in type.GetProperties())
      {
        var getValidProperty = item.GetCustomAttributes();
        var entityGuid = Helper.GetGuid(item.GetValue(null));
        if (getValidProperty != null && getValidProperty.Any(c=> c.ToString() == "InCludeEventLog"))
          keyValuePairs.Add(entityGuid, item.Name);
      }

1 Ответ

2 голосов
/ 19 мая 2019

Вы должны смотреть на атрибуты каждого свойства, а не только класса. Вам также следует смотреть только на статические свойства, поскольку вы хотите получить их значение без экземпляра класса.

var propertiesToInclude = 
        typeof(Constants).GetProperties(BindingFlags.Static)
            .Where(x => x.GetCustomAttribute<InCludeEventLog>() != null)
            .ToList();

// Since you are getting the value of static properties,
// you can pass null to GetValue.
// If you need the value of non-static properties, you need a class instance here.
var keyValues = propertiesToInclude.ToDictionary(x => x.Name, x => x.GetValue(null));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...