2017-02-17 4 views
0
class foo { 
    int foo1; 
    bar[] bars = new bar[64]; 
} 

class bar { 
    int bar1; 
    int bar2; 
} 

Я пытаюсь прочитать все в классе foo (ранее был структурой, но не мог создать экземпляр массива в структуре). Но это дает мне ошибку, говоря, что он не может рассчитать размер для bar[], почему это и как я могу это сделать?SizeOf массив как поле?

foo bla = new foo(); 

foreach (var field in 
    typeof(foo).GetFields(BindingFlags.Instance | 
    BindingFlags.NonPublic | 
    BindingFlags.Public)) { 

    Console.WriteLine("({0}) {1} = {2} (size: {3})", field.FieldType, field.Name, field.GetValue(bla), Marshal.SizeOf(field.FieldType)); 

} 

ответ

0

Я подозреваю, что это связано с тем, что ваше поле является типом массива - я не могу подтвердить это из документации.

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

Другой вариант - просто держаться подальше от попыток обнаружить размер массива.

Что касается примечания, вы пробовали свой код в полях общего типа?

+0

Как я могу проверить размер массива вручную? Я сделал так, чтобы он мог видеть, какой тип массива он имеет и проверяет размер этих типов. Но как мне получить длину массива из поля? – user1768788

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