2017-02-08 3 views
0

Внимание! Извините, я плохой английский! Используя фиксированный массив в структурах:.NET C# небезопасный/фиксированный CS1666, работающий с массивом указателей на элементы в другом массиве

[StructLayout(LayoutKind.Explicit, Size = 12)] 
public unsafe struct union_reg 
{ 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] 
    [FieldOffset(0)] 
    public fixed byte r[12]; 

    [FieldOffset(0)] 
    public fixed UInt16 rp[6]; 
} 

пытаюсь создать и получить доступ к элементам через массив указателей:

union_reg reg = new union_reg(); 
byte*[] r = new byte*[9] { &reg.r[rB], &reg.r[rC], &reg.r[rD], &reg.r[rE], &reg.r[rH], &reg.r[rL], &rhl, &reg.r[rA], &reg.r[6] }; 

Если я задекларированный его функцию, все хорошо, но если я пытаюсь задекларированным его в классе, я получаю ошибку CS1666. Пожалуйста, помогите решить проблему!

const byte rB = 1; 
const byte rC = 0; 
const byte rD = 3; 
const byte rE = 2; 
const byte rH = 5; 
const byte rL = 4; 
const byte rA = 7; 
const byte rF = 6;` 
+1

почему вы так переживаете такие махинации? –

+0

Попробуйте сделать быстрый алгоритм. Эмулирование старого процессора. –

+0

Вам не нужно использовать 'unsafe' и' struct', чтобы быстро сделать что-то в C#. –

ответ

0

Эта ошибка поясняется на msdn here.

Вы не можете иметь фиксированные типы как поля/свойства внутри нефиксированного класса.

+0

Я пробовал, но получаю ту же ошибку. 'fixed (byte * b = & reg.r [rB]) {}' –

+1

Возможно, если вы сообщите нам, что вы на самом деле пытаетесь сделать, мы можем дать вам лучший ответ. –

Смежные вопросы