如何用Marshal.SizeOf ()替换Marshal.SizeOf(Object)?
我正在从现有代码构建一个Universal类库,并且我得到一些编译器警告,我终其无法弄清楚该怎么做。
我有这样的代码:
void SomeMethod(Object data) { var size = Marshal.SizeOf(data); ... }
代码构建,但在Universal项目(我猜,.NET 4.5.1及更高版本的项目)中,我得到以下编译器警告:
警告CS0618:’System.Runtime.InteropServices.Marshal.SizeOf(object)’已废弃:’SizeOf(Object)在将来的版本中可能不可用。 而是使用SizeOf ()。
但是如何使用通用无参数方法Marshal.SizeOf()
在上述情况下为Marshal.SizeOf(Object)
创建替换? 从理论上讲,我可能不知道什么类型的data
是什么?
是因为使用Marshal.SizeOf(Object)
被认为是不好的做法,它被Obsolete
? 带回家的消息应该是“完全重构代码”?
好的,在收到您的评论后,似乎您需要的一切已经存在:
SizeOf
:我认为这是您需要的方法,但由于类型推断 ,您不必明确定义generics参数。 你可以简单地写var size = Marshal.SizeOf(myStructure);
编译器将从给定对象中提取类型并填写generics参数。
SizeOf
:当你自己的类可能已经是generics类并且你有一个T
但没有使用generics类型的真实实例时,这个方法会派上用场。 在这种情况下,应该选择这种方法。
这种反思方法怎么样:
private static int MySizeOf(object structure) { var marshalType = typeof(Marshal); var genericSizeOfMethod = marshalType.GetMethod("SizeOf", Type.EmptyTypes); var sizeOfMethod = genericSizeOfMethod.MakeGenericMethod(structure.GetType()); var size = (int)sizeOfMethod.Invoke(null, null); return size; }