这让我疯了一会儿。我有一个包含其他类的类。我需要遍历第一个类,寻找第二类的类型,然后检索字段的值。
下面的代码显然在行
上失败了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;
}
}
答案 0 :(得分:2)
field.GetValue
接受获取字段值的实例
在你的情况下,我希望它应该是field.GetValue(mFC)
。
同样field.FieldType.Name == "MySecondClass"
不是检查类型的最佳方法,因为类型名称更改将导致代码中断。我建议将其替换为field.FieldType == typeof(MySecondClass)
。
答案 1 :(得分:1)
((MySecondClass)field.GetValue(MFC))secondClassString;
在console.writeline
中使用它