C# Reflection получить поле или свойство по имени ⇐ C#
-
Гость
C# Reflection получить поле или свойство по имени
Есть ли способ указать имя функции, которая затем возвращает значение поля или свойства данного объекта с этим именем? Я пытался обойти это с помощью оператора объединения значений null, но, видимо, ему не нравятся разные типы (что также немного странно для меня, потому что null — это null). Я мог бы разделить это на нули, но должен быть лучший способ сделать это. Вот моя функция, и две строки с объектами Comparison не компилируются, но я оставлю их там, чтобы показать, что я пытаюсь сделать.
private void SortByMemberName(список List, строка имя_члена, логическое значение по возрастанию) { Тип типа = тип (T); Информация о MemberInfo = type.GetField(memberName) ?? type.GetProperty(имя_члена); если (информация == ноль) { throw new Exception("Указанное имя члена не является ни полем, ни свойством типа " + type.FullName); } Сравнение asc = (t1, t2) => ((IComparable) info.GetValue(t1)).CompareTo(info.GetValue(t2)); Comparison desc = (t1, t2) => ((IComparable) info.GetValue(t2)).CompareTo(info.GetValue(t1)); list.Sort(по возрастанию? по возрастанию: по убыванию); } Я слышал о чем-то, называемом динамическим LINQ, которое можно использовать, но ради обучения я делаю это по-своему.
Есть ли способ указать имя функции, которая затем возвращает значение поля или свойства данного объекта с этим именем? Я пытался обойти это с помощью оператора объединения значений null, но, видимо, ему не нравятся разные типы (что также немного странно для меня, потому что null — это null). Я мог бы разделить это на нули, но должен быть лучший способ сделать это. Вот моя функция, и две строки с объектами Comparison не компилируются, но я оставлю их там, чтобы показать, что я пытаюсь сделать.
private void SortByMemberName(список List, строка имя_члена, логическое значение по возрастанию) { Тип типа = тип (T); Информация о MemberInfo = type.GetField(memberName) ?? type.GetProperty(имя_члена); если (информация == ноль) { throw new Exception("Указанное имя члена не является ни полем, ни свойством типа " + type.FullName); } Сравнение asc = (t1, t2) => ((IComparable) info.GetValue(t1)).CompareTo(info.GetValue(t2)); Comparison desc = (t1, t2) => ((IComparable) info.GetValue(t2)).CompareTo(info.GetValue(t1)); list.Sort(по возрастанию? по возрастанию: по убыванию); } Я слышал о чем-то, называемом динамическим LINQ, которое можно использовать, но ради обучения я делаю это по-своему.
Мобильная версия