мне нужно узнать размер общей структуры (я не могу это сделать, как SizeOf (T) или с помощью Marshal.SizeOf (...) 0> дает мне ошибку)Размер общей структуры
Так что я написал:
public static class HelperMethods
{
static HelperMethods()
{
SizeOfType = createSizeOfFunc();
}
public static int SizeOf<T>()
{
return SizeOfType(typeof(T));
}
public static readonly Func<Type, int> SizeOfType = null;
private static Func<Type, int> createSizeOfFunc()
{
var dm = new DynamicMethod("SizeOfType", typeof(int), new Type[] { typeof(Type) });
ILGenerator il = dm.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Sizeof); //needs to be il.Emit(OpCodes.Sizeof, typeof(something))
il.Emit(OpCodes.Ret);
var func = (Func<Type, int>)dm.CreateDelegate(typeof(Func<Type, int>));
return func;
}
}
diffuclty что il.Emit (OpCodes.Sizeof) нужен аргумент, который я не могу передать его во время метода (SizeOfType) создания. Как передать параметр, который находится в стеке для il.Emit (OpCodes.Sizeof), используя IL? (или другое решение, но я хочу кэшировать функцию (делегат), а не результат, который предлагается во 2-м ответе)
Можете ли ваши вопросы быть примером [XY-Problem] (http://www.perlmonks.org/?node_id=542341)? (это и http: // stackoverflow.com/questions/18166429/cast-pointer-to-generic-structure) – I4V
Я заявил, что хочу узнать размер общей структуры (мне нужно выделить неуправляемую память такого размера). Проблема в том, что эти структуры могут быть общепринятым, поэтому известные методы, такие как Marshal.SizeOf (...) и sizeof(), не работают. – dajuric