如果尝试使用该属性创建泛型结构,则使用该结构会在运行时生成异常:[StructLayout(LayoutKind.Explicit)]
System.TypeLoadException:无法从程序集"bar"加载类型'foo',因为泛型类型不能具有显式布局.
我一直很难找到任何证据证明这种限制甚至存在.该Type.IsExplicitLayout文档强烈暗示,它被允许和支持.有谁知道为什么不允许这样做?我想不出为什么泛型类型会使其不易验证的任何原因.作为一个边缘案例,它让我感到震惊,他们根本不愿意实施.
以下是显式通用布局有用的原因示例:
public struct TaggedUnion<T1,T2>
{
public TaggedUnion(T1 value) { _union=new _Union{Type1=value}; _id=1; }
public TaggedUnion(T2 value) { _union=new _Union{Type2=value}; _id=2; }
public T1 Type1 { get{ if(_id!=1)_TypeError(1); return _union.Type1; } set{ _union.Type1=value; _id=1; } }
public T2 Type2 { get{ if(_id!=2)_TypeError(2); return _union.Type2; } set{ _union.Type2=value; _id=2; } }
public static explicit operator T1(TaggedUnion<T1,T2> value) { return value.Type1; }
public static explicit operator T2(TaggedUnion<T1,T2> value) { return value.Type2; …Run Code Online (Sandbox Code Playgroud)