[英]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.