簡體   English   中英

按名稱動態獲取/設置 c# 對象屬性的最簡單方法

[英]Easiest way to dynamically get/set properties of c# objects by name

我有幾個不同類型的對象以及我需要在這些對象上獲取和設置的屬性的名稱。 在像 javascript 這樣的語言中,這是微不足道的,因為我可以使用索引器語法獲取和設置值。

obj2[propertyName] = obj1[propertyName];

在 c# 中,這不是那么容易。 我知道我可以使用反射,但那是很多代碼。 我知道有動態對象,但它們不會自動具有按名稱引用屬性的方法。 在任意類型的對象上通過名稱動態獲取和設置屬性的最簡單方法是什么(即它們具有屬性但不都共享公共接口或基類)?

更新:經過進一步研究,如果有人有任何想法,似​​乎 FastMember、Impromptu、Dynamitey 或者 FSharp.Dynamic 可以在這里提供幫助......

冒着過度簡化解決方案的風險,為什么不在抽象反射代碼的對象類型之外創建一對擴展方法呢? 方法如

static void SetProperty<T>(this object, string propertyName, T propertyValue) 
static T GetProperty<T>(this object, string propertyName)

用法與您的問題描述的不太一樣:

obj2.SetProperty("ArbitraryPropertyName", obj1.GetProperty("AribraryPropertyName");

屬性對象中的動態值:

public dynamic propertyName {
   get; set;
}

要按名稱獲取屬性,您需要在https://www.geeksforgeeks.org/c-sharp-indexers/類中實現索引器

暫無
暫無

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

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