我正试图找到一种方法来处理structs上字段的反射字段信息。我的结构通常包含固定宽度的字节数组。当我在遍历结构字段列表时遇到其中一个数组时,我需要了解一个字段是否是数组,并与其他字段类型不同地处理该数组。我该怎么做?
举个例子,这里有一个示例结构,下面的方法也阐述了我的问题?
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct MyStruct
{
public int IntegerVal;
public unsafe fixed byte MyByteBuff[20];
}
//Later in code...
public static void WorkWithStructs(Type t) //t will always be a struct
{
foreach (var f in t.GetFields())
{
if (f.FieldType == typeof(int)
{
//Do Int work
}
else if (???) //Test for a fixed-width byte array
{
// If MyStruct were passed to this method, this is where I
// would need to handle the MyByteBuff field. Specifically,
// I need to discern the object type (in this case a byte)
// as well as the length in bytes.
}
}
}
您可以检查字段类型上是否存在FixedBufferAttribute
自定义属性(在类型.的CustomAttributes
集合中找到
在您的情况下,您可以检查是否存在与以下属性匹配的属性:
[FixedBufferAttribute(typeof(Byte), 20)]
(添加FixedBufferAttribute
是自动完成的——如果您尝试手动添加,则会出现一个错误,提示您使用fixed
关键字)。