如何在结构上反映固定宽度byte []字段信息?

时间:2014-09-12 17:51:15

标签: c# arrays reflection struct system.reflection

我正在尝试使用结构化字段的反射字段信息。我的结构通常包含固定宽度的字节数组。当我在遍历struct字段列表时遇到其中一个数组时,我需要捕获一个字段是否是一个数组并且处理数组的方式与我的其他字段类型不同。我怎么能这样做?

作为一个例子,这是一个示例结构,以下方法也阐明了我的问题?

[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.
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您可以检查字段类型是否存在FixedBufferAttribute自定义属性(可在类型的CustomAttributes集合中找到。

在您的情况下,您可以检查是否存在与以下内容匹配的属性:

[FixedBufferAttribute(typeof(Byte), 20)]

(自动添加FixedBufferAttribute - 如果您尝试手动添加,则会收到错误消息,指出要使用fixed关键字。