簡體   English   中英

獲取動態對象的PropertyInfo

[英]Getting a PropertyInfo of a dynamic object

我有一個庫,它依賴於它接收的類的PropertyInfo(獲取和設置值)進行一堆反射工作。

現在我希望能夠使用動態對象,但我找不到如何獲取動態屬性的PropertyInfo。 我已經檢查了替代方案,但對於那些我需要改變的地方,我使用PropertyInfo來獲取/設置值。

dynamic entity = new ExpandoObject();
entity.MyID = 1;

// - Always null
PropertyInfo p = entity.GetType().GetProperty("MyID");
// - Always null
PropertyInfo[] ps = entity.GetType().GetProperties();

// - These are called everywhere in the code
object value = p.GetValue(entity);
p.SetValue(entity, value);

有可能以某種方式獲取或創建PropertyInfo只是為了能夠在動態對象上使用它的GetValue()SetValue()嗎?

在封面下, ExpandoObject實際上只是一本字典。 您可以通過投射來獲取字典。

dynamic entity = new ExpandoObject();
entity.MyID = 1;

if(entity.GetType() == typeof(ExpandoObject))
{
    Console.WriteLine("I'm dynamic, use the dictionary");
    var dictionary = (IDictionary<string, object>)entity;
}
else
{
    Console.WriteLine("Not dynamic, use reflection");
}

您可以修改Mapping方法以檢查傳入的對象是否是動態的,並通過不同的路徑路由,該路徑只是迭代字典的鍵。

https://dotnetfiddle.net/VQQZdy

暫無
暫無

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

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