Заказ FieldInfos - PullRequest
       1

Заказ FieldInfos

2 голосов
/ 13 февраля 2012

Я делаю кодирование и декодирование с использованием отражения.когда я читаю this.GetType (). Getfields (), на некоторых машинах он возвращается в случайном порядке, мне нужно вернуть их обратно, чтобы правильно выполнить кодирование и декодирование.

Можно ли отсортировать массиввозвращено из this.GetType (). GetFields () с использованием FieldInfo.FieldHandle Вот так:

        FieldInfo[] infos = GetType().GetFields();
        Array.Sort(infos, delegate(FieldInfo first, FieldInfo second)
        {
            return first.FieldHandle.Value.ToInt32().CompareTo(second..Value.ToInt32());
        });

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

есть ли какие-либо проблемы, которые могут возникнуть в будущем изэтот код.

мой вопрос об использовании "FieldHandle" в заказе.

, если он нестабилен, что я могу использовать вместо него.

С уважением,

1 Ответ

1 голос
/ 13 февраля 2012

Гораздо проще было бы использовать Linq:

FieldInfo[] infos = typeof(string).GetFields()
   .OrderBy(fi => fi.FieldHandle.Value.ToInt32()).ToArray();

Но помните, что FieldHandle не обязательно является стабильным или значимым полем для сортировки.

РЕДАКТИРОВАТЬ: я вижу, вы спрашиваете об использовании FieldHandle для сортировки, в целом. В этом случае ответ ДА, у вас будут проблемы с ним в будущем. FieldHandle - указатель на структуру в памяти. Эта ячейка памяти выделяется СЛУЧАЙНО. Каждый раз, когда вы запускаете свою программу, вы получаете различный набор FieldHandles, и ваша сортировка будет отличаться. Это не уникальный и постоянный идентификатор поля, это просто указатель памяти.

Что вы пытаетесь достичь с помощью этой сортировки? Может быть, мы можем предложить несколько альтернатив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...