使用反射在struct中获取struct

时间:2013-10-30 11:34:29

标签: c# reflection struct

我正在尝试使用反射在结构体中获取结构体(我使用结构体来构造一些继承的C DLL结构):

public struct Struct1
{
    public Int32 Value;
}
public struct Struct2
{
    // I0/I1 are substructures in an "Unrolled" array.
    public Struct1 I0;
    public Struct1 I1;
}

然后,在我的程序中:

class Program
{
    static void Main(string[] args)
    {
        Struct2 MyStr = new Struct2();
        MyStr.I0.Value = 0; 
        MyStr.I1.Value = 1; 
        // I want to access I0/I1 using reflection. 
        for (int i =0; i<2;i++) { 
            string structname = "I"+i;               
            FieldInfo FI = typeof(Struct2).GetType().GetField(structname, BindingFlags.Public | BindingFlags.Instance);
            object StructureWeWant = FI.GetValue(MyStr);  // Tool errors here, saying FI is empty. 
            FieldInfo ValueFieldInsideStruct1 = typeof(Struct1).GetField("Value");
            Int32 ValueIWantToPrint = (Int32) ValueFieldInsideStruct1.GetValue(StructureWeWant);
            Console.WriteLine(structname + "  " + ValueIWantToPrint);
        }
    }
}

任何人都知道我的错误在哪里?我认为GetField()可以访问结构,但也许它们不是?

2 个答案:

答案 0 :(得分:4)

替换它:

FieldInfo FI = typeof(Struct2).GetType().GetField(structname, BindingFlags.Public | BindingFlags.Instance);

用这个:

FieldInfo FI = typeof(Struct2).GetField(structname, BindingFlags.Public | BindingFlags.Instance);

答案 1 :(得分:4)

typeof(Struct2).GetType()为您提供System.RuntimeType,而不是您的结构。删除GetType()以使其正常运行。