当Marshal.SizeOf已过时如何从通用类型获取结构的大小?

时间:2019-07-06 17:50:02

标签: c#

根据Marshal.SizeOf() MSDN docs

  

警告

     

此API现在已过时。

在不使用此过时函数的情况下获取结构大小的正确方法是什么?我们可以假设.NET Core 2.1和C#8。

我需要在泛型类型上使用它,因此我的代码读取类似于此伪代码:

...<T> where T : struct
{
    ...
    // Note that T will have [StructLayout(LayoutKind.Sequential, Pack = 1)]
    assert(something == Marshal.SizeOf(typeof(T)) ...)
}

1 个答案:

答案 0 :(得分:1)

您可以使用Marshal.SizeOf<T>()

例如:

struct DDType
{
    public int No1 { get; set; }
    public int No2 { get; set; }
    public string Name { get; set; }
}

Marshal.SizeOf<DDType>();