我有这样的字符串数组:
namespace DynamicCore
{
public class DynamicCode
{
List<Variable> variableList = new List<Variable>();
public DynamicCode()
{
Variable Variable = new Variable();
Variable.ID = "Variable_26545789";
Variable.Type = 1;
variableList.Add(Variable);
Variable = new Variable();
Variable.ID = "Variable_vdvd3679";
Variable.Type = 2;
variableList.Add(Variable);
}
}
}
我编译了这个数组并将其存储到内存中。我通过以下代码获得variableList
:
string name = "DynamicCore.DynamicCode";
Type type = results.CompiledAssembly.GetType(name, true);
object instance = Activator.CreateInstance(type);
FieldInfo filed = type.GetField("variableList",
BindingFlags.Instance |
BindingFlags.NonPublic);
我尝试将filed
(variableList
)投射到List<Variable>
,如下所示:
List<Variable> Variables = (List<Variable>)filed;
但我收到了这个错误:
Cannot convert type 'System.Reflection.FieldInfo' to 'System.Collections.Generic.List<Variable>'
如果有人可以解释这个问题的解决方案,那将非常有用。
答案 0 :(得分:2)
您的变量filed
中包含有关您的字段Variable
的元数据。使用此元数据,您可以找到它所在的类,如果它是私有的等等。
你想要别的东西。您想要检索使用它的字段的值。你需要一个额外的步骤:
object theActualValue = filed.GetValue(instance);
您可以使用此值转换到您的列表:
List<Variable> Variables = (List<Variable>)theActualValue;
我的建议是重命名这些东西,使其更具可读性。您的代码可能如下所示:
FieldInfo field = type.GetField("variableList",
BindingFlags.Instance |
BindingFlags.NonPublic);
List<Variable> variables = (List<Variable>)field.GetValue(instance);
答案 1 :(得分:1)
filed
只是FieldInfo
,描述字段的对象,它不是字段的值。
要获取字段的值,请使用GetValue
,如下所示:
var list = (List<Variable>)filed.GetValue(instance);
这将返回实例variableList
的字段instance
的值。