Я хочу получить поля в моем объекте в определенном порядке.Я нашел способ использовать отражение для извлечения полей, но не гарантируется, что поля будут возвращаться в том же порядке каждый раз.Вот код, который я использую для извлечения полей:
ReleaseNote rn = new ReleaseNote();
Type type = rn.GetType();
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
Я нашел этот ответ на другой вопрос , который объясняет, как добавить пользовательский атрибут и использовать его для сортировки полей.,Исходя из этого, я считаю, что мне нужно обновить свой код для извлечения полей в отсортированном порядке, создав собственный атрибут «MyOrderAttribute», который я буду использовать для сортировки массива FieldInfo.
Здесь я создал атрибут идобавил его в мои поля:
namespace TestReleaseNotes
{
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
public class MyOrderAttribute : Attribute
{
public MyOrderAttribute(int position)
{
this.Position = position;
}
public int Position { get; private set; }
}
class ReleaseNote
{
[MyOrder(0)]
private string title;
[MyOrder(1)]
private string status;
[MyOrder(3)]
private string implementer;
[MyOrder(3)]
private string dateImplemented;
[MyOrder(4)]
private string description;
И здесь я пытаюсь использовать атрибут для сортировки списка полей:
ReleaseNote rn = new ReleaseNote();
Type type = rn.GetType();
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic).OrderBy(f => f.Position);
Это дает мне ошибку "'FieldInfo не содержитопределение 'Позиция' и недоступный метод расширения 'Позиция', принимающий первый аргумент типа 'FieldInfo', может быть найден (вы пропустили директиву using или ссылку на сборку?) "
Я также попробовал GetCustomAttributeметод, который выдает ошибку «MyOrderAttribute - это тип, который недопустим в данном контексте»:
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic).OrderBy(f => f.GetCustomAttribute(MyOrderAttribute);
Каков правильный синтаксис для доступа к MyOrderAttribute и использования его для сортировки моих полей?