Я пытаюсь создать новый тип, используя Reflection.Emit (в C#).Msil Emit статический массив в динамическом типе
код я хочу создать что-то похожее на
public class
{
public static int[] A = new int[] {1, 2, 3};
}
Я первый попытался определить поле, а затем установить его значение:
var fb = tb.DefineField("A", FieldAttributes.Public | FieldAttributes.Static);
fb.SetValue(null, new int[] {1, 2, 3});
, но он не работает, так как setValue поддерживается только для простых типов (int, float, ...).
Теперь я пытаюсь использовать DefineInitializedData (гораздо более длинный код, который не работает ...), но он не генерирует никакого действительного кода IL.
Моим общим советом было бы кодировать то, что вы хотите достичь на C#, разобрать его с помощью ildasm, а затем посмотреть на вывод идей. –
Вы определили тип A? 'DefineField (« A », FieldAttributes.Public | FieldAttributes.Static)' похоже, отсутствует параметр «Тип» или мне что-то не хватает? – nXu
@nXu Это скорее всего копия и вставка. Вы действительно не можете использовать 'SetValue()', как это. – svick