从类中的类中获取字段值

时间:2014-02-28 12:34:13

标签: c# reflection

这让我疯了一会儿。我有一个包含其他类的类。我需要遍历第一个类,寻找第二类的类型,然后检索字段的值。

下面的代码显然在行

上失败了
Console.WriteLine(field.GetValue(mFC.field.secondClassString));        

因为这不是有效字段。可能我会以错误的方式解决这个问题 - 任何想法?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            MyFirstClass mFC = new MyFirstClass();

            FieldInfo[] fI = mFC.GetType().GetFields();

            foreach (FieldInfo field in fI)
            {
                if (field.FieldType.Name == "MySecondClass")
                {
                    //get the fields
                    Console.WriteLine(field.GetValue(mFC.field.secondClassString));                    
                }
            }
        }
    }

    class MyFirstClass
    {
        public MySecondClass firstMSC = new MySecondClass("First Instance");
        public MySecondClass secondMSC = new MySecondClass("Second Instance");
        public string firstClassString = "I'm from the first class";
        public int firstClassInt = 5;
    }

    class MySecondClass
    {
        public MySecondClass(string input)
        {
            this.secondClassString = input;
        }
        public string secondClassString;
        public int secondClassInt = 10;
    }

}

2 个答案:

答案 0 :(得分:2)

field.GetValue接受获取字段值的实例 在你的情况下,我希望它应该是field.GetValue(mFC)

同样field.FieldType.Name == "MySecondClass"不是检查类型的最佳方法,因为类型名称更改将导致代码中断。我建议将其替换为field.FieldType == typeof(MySecondClass)

答案 1 :(得分:1)

((MySecondClass)field.GetValue(MFC))secondClassString;

在console.writeline

中使用它