簡體   English   中英

在 C# 中訪問動態對象中的元素

[英]Accessing elements in a dynamic object in C#

我有一個返回dynamic對象的公共函數。 這種dynamic對象實際上是MyObj類型,其中MyObj是包含該函數的類的私有類。

public class MyClass
{
        private class MyElement
        {
            public string myString{ get; set; }
        }

        private class MyObj
        {
            public List<MyElement> data { get; set; }
        }

        public dynamic myMethod()
        {
            List<MyElement> myList = (some complex code here).ToList();
            var myObj = new MyObj{ data = myList };

            return myObj;
        }
}

現在我需要像這樣從類外部調用這樣的函數:

var c = new MyClass();
var stuff = c.myMethod();

並遍歷輸出對象的元素,但正如你所看到的, stuff對象被塑造成一個dynamic (看看函數的返回類型),所以我不知道類型(是私有的)。 如何探索數組?

我會盡量回答你的問題,盡管你想要達到的目標有點奇怪。

第一件事:如果該對象的類是私有的,則您無法訪問動態對象的屬性,因為該對象的元數據未向您公開。

唯一的方法是使用反射:

var myClass = new MyClass();
var stuff = myClass.myMethod();
var dynamicType = (TypeInfo)stuff.GetType();

var dataProperty = dynamicType.GetProperty("data");
var data = (IEnumerable)dataProperty.GetValue(stuff);

var result = new List<string>();
Type itemType = null;
PropertyInfo myProperty = null;
foreach(var item in data){
    if(itemType == null){
        itemType = item.GetType();
        myProperty = itemType.GetProperty("myString");
    }

    var content = (string)myProperty.GetValue(item);
    result.Add(content);
}

暫無
暫無

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

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