Вы просто хотите использовать метод Marshal.SizeOf
в пространстве имен System.Runtime.InteropServices
.
foreach (var fieldInfo in typeof(MyClass).GetFields(BindingFlags.Instance |
BindingFlags.Public | BindingFlags.NonPublic))
{
Console.WriteLine(Marshal.SizeOf(fieldInfo.FieldType));
}
Однако обратите внимание на следующий параграф в разделе «Примечания»:
Возвращенный размер фактически является размером неуправляемого типа. Неуправляемые и управляемые размеры объекта могут отличаться. Для типов символов на размер влияет значение CharSet, примененное к этому классу.
Эти различия, вероятно, несущественны, в зависимости от вашей цели ... Я даже не уверен, что возможно получить точный размер в управляемой памяти (или, по крайней мере, не без особых трудностей).