如何用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(T) :我认为这是您需要的方法,但由于类型推断 ,您不必明确定义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; }