Информация об изменениях

Сообщение Re[2]: Возможно ли одним методом получить Generic-поле разны от 25.01.2016 10:57

Изменено 25.01.2016 12:22 LWhisper

Здравствуйте, hardcase, Вы писали:

H>Какая задача вообще решается?

H>Идея использования private членов типов выглядит не самым лучшим образом.

Сериализация и десериализация. Хотелось вытянуть при сериализации внутренний массив, а при десериализации — подсунуть на место. На самом деле, хочется воспользоваться конструктором с указанием Capacity и просто добавлять элементы по мере десериализации. Проблема заключается в том, что работаю исключительно с упакованными в Object данными и пытаюсь не использовать Reflection, а если это необходимо, то компилировать их через Expression или Emit в лямбды вида Action/Func<Object, Object> для вызова без DynamicInvoke.
Но в случае с List<T> и Dictionary<TKey,TValue> кэшировать такие методы слишком накладно. Вот и пытаюсь найти способ работать с Generic полями, свойствами, используя конкретные типы только для каста и распаковки. С Nullable-типами всё было просто так как Expression.Convert умеет преобразовывать примитивные типы даже в нулябельные энамы. А вот с боле сложными Generic-типами непонятно что делать.

---UPD:
Ох, ваш покорный слуга — дятел. -_-
List<T> ведь реализует IList, а Dictionary<TKey, TValue> — IDictionary.
Проблема решена. Но вопрос всё-таки не считаю решённым, так как было бы интересно — возможно это или нет? С List и Dictionary повезло. Не факт, что повезёт с другими.
Re[2]: Возможно ли одним методом получить Generic-поле разны
Здравствуйте, hardcase, Вы писали:

H>Какая задача вообще решается?

H>Идея использования private членов типов выглядит не самым лучшим образом.

Сериализация и десериализация. Хотелось вытянуть при сериализации внутренний массив, а при десериализации — подсунуть на место. На самом деле, хочется воспользоваться конструктором с указанием Capacity и просто добавлять элементы по мере десериализации. Проблема заключается в том, что работаю исключительно с упакованными в Object данными и пытаюсь не использовать Reflection, а если это необходимо, то компилировать их через Expression или Emit в лямбды вида Action/Func<Object, Object> для вызова без DynamicInvoke.
Но в случае с List<T> и Dictionary<TKey,TValue> кэшировать такие методы слишком накладно. Вот и пытаюсь найти способ работать с Generic полями, свойствами, используя конкретные типы только для каста и распаковки. С Nullable-типами всё было просто так как Expression.Convert умеет преобразовывать примитивные типы даже в нулябельные энамы. А вот с боле сложными Generic-типами непонятно что делать.

---UPD:
Ох, ваш покорный слуга — дятел. -_-
List<T> ведь реализует IList, а Dictionary<TKey, TValue> — IDictionary.
Проблема решена. Но вопрос всё-таки не считаю решённым, так как было бы интересно — возможно это или нет? С List и Dictionary повезло. Не факт, что повезёт с другими. (Например, у Stack<T> отсутствует Pust(Object))