Мне нужно сгенерировать код, используя деревья выражений, которые быстро заполняют массив структур T[]
, где T содержит поле только для чтения. Мне нужно инициализировать его, как после GetUninitializedObject () + IL или сеттеров на основе отражения.
ОБНОВЛЕНИЕ: В настоящее время это кажется невозможным. Пожалуйста, проголосуйте за это на MS Applications
struct Strct
{
public readonly int Value;
}
этот код не работает:
Expression.Assign(
Expression.Field(structByIndexFromArrayExp, "Value"),
deserializedValueExp)
Во время построения дерева выражений я получаю эту ошибку: Expression must be writeable
Что вполне логично с точки зрения обычного кода, но не во время десериализации.
FormatterServices.GetUninitializedObject()
возвращает объект, который, я думаю, мне нужно избегать, поскольку он упакован и поэтому значительно медленнее.
Какой самый быстрый способ инициализации таких структурных массивов?
Обновление: На данный момент единственный реалистичный способ, который я вижу, - это динамически генерировать клон структуры T, но без атрибута readonly для полей, заполнять их, исправлять оба массива в памяти и выполнять копирование памяти , Пожалуйста, проголосуйте, чтобы сказать Microsoft, чтобы исправить это .