C# 泛型中非托管约束和结构约束之间的区别

sri*_*rni 0 c# generics

where T : struct -这里T必须是值类型。

where T : Unmanaged-这里T不能是引用类型。

如果结构体和非托管都用于值类型,那么两者有什么区别?

gre*_*k40 5

根据https://blog.jetbrains.com/dotnet/2018/07/19/unmanagement-delegate-enum-type-constraints-c-7-3-rider-resharper/

为了满足非托管约束,类型必须是结构体,并且该类型的所有字段必须属于以下类别之一:

  • 类型为 sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、IntPtr 或 UIntPtr。
  • 是一个枚举类型。
  • 是指针类型。
  • 是满足非托管约束的用户定义结构。

因此,非托管约束比结构约束更具约束性。