簡體   English   中英

將FieldInfo轉換為C#中的列表

[英]Cast FieldInfo to list in C#

我有這樣的字符串數組:

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);

我嘗試將filedvariableList )轉換為List<Variable>如下所示:

List<Variable> Variables = (List<Variable>)filed;

但我得到了這個錯誤:

Cannot convert type 'System.Reflection.FieldInfo' to 'System.Collections.Generic.List<Variable>'    

如果有人可以解釋這個問題的解決方案將是非常有幫助的。

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

filed只是FieldInfo ,一個描述該字段的對象,它不是該字段的

要獲取該字段的值,請使用GetValue如下所示:

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

這將返回實例instance的字段variableList的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM