Как получить список свойств производного класса по отражению, упорядоченный сначала по свойствам базового класса, а затем реквизиты производного класса - PullRequest
0 голосов
/ 04 октября 2018

Я ищу, чтобы получить список свойств из производного класса, я написал функцию, которая дает мой список свойств.Моя проблема заключается в том, что я хочу, чтобы список свойств содержал первые свойства базового класса и после свойств производного класса, как я могу это сделать?теперь я получаю сначала свойства в производном, а затем из базы

PropertyInfo[] props = typeof(T).GetProperties();
        Dictionary<string, ColumnInfo> _colsDict = new Dictionary<string, ColumnInfo>();

        foreach (PropertyInfo prop in props)
        {
            object[] attrs = prop.GetCustomAttributes(true);
            foreach (object attr in attrs)
            {
                ColumnInfo colInfoAttr = attr as ColumnInfo;
                if (colInfoAttr != null)
                {
                    string propName = prop.Name;
                    _colsDict.Add(propName, colInfoAttr);                        
                }
            }
        }

1 Ответ

0 голосов
/ 04 октября 2018

Если вы знаете тип базового класса, вы, вероятно, можете сделать что-то вроде этого:

  public static Dictionary<string, object> GetProperties<Derived, Base>()
  {
        var onlyInterestedInTypes = new[] { typeof(Derived).Name, typeof(Base).Name };

        return Assembly
            .GetAssembly(typeof(Derived))
            .GetTypes()
            .Where(x => onlyInterestedInTypes.Contains(x.Name))
            .OrderBy(x => x.IsSubclassOf(typeof(Base)))
            .SelectMany(x => x.GetProperties())
            .GroupBy(x => x.Name)
            .Select(x => x.First())
            .ToDictionary(x => x.Name, x => (object)x.Name);
  }

Важной частью для вас является .OrderBy(x => x.IsSubclassOf(typeof(Base))), который упорядочит свойства.

...