在C#中将FieldInfo转换为列表

3

我有一个字符串数组,就像这样:

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>'    

如果有人能够解释这个问题的解决方案,那将非常有帮助。


List<Variable> Variables = ((DynamicCode)instance).variableList; - Gabriel GM
@ChristophKn 我使用反射来获取字段,但这个链接与此主题无关。 - Ali Soltani
2个回答

4

您的变量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);

3

filed 只是描述字段的对象 FieldInfo,它不是字段的值。

要获取字段的值,请使用GetValue 方法,如下所示:

var list = (List<Variable>)filed.GetValue(instance);

这将返回实例instance的字段variableList的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接