按名称动态获取/设置c#对象属性的最简单方法

时间:2015-11-14 23:08:12

标签: c# dynamic reflection

我有几个不同类型的对象以及我需要获取和设置的属性的名称。在像javascript这样的语言中,这是微不足道的,因为我可以通过索引器语法来获取和设置值。

obj2[propertyName] = obj1[propertyName];

在c#中,它并不那么容易。我知道我可以使用反射,但这是很多代码。我知道那里有动态对象,但他们不会自动地通过名称引用属性。什么是在任意类型的对象上按名称动态获取和设置属性的最简单方法(即它们具有属性但不是共享一个公共接口或基类)?

更新:经过进一步研究,如果有人有任何想法,FastMember,Impromptu,Dynamitey或FSharp.Dynamic似乎可以提供帮助......

2 个答案:

答案 0 :(得分:4)

有可能过度简化解决方案,为什么不从抽象反射代码的对象类型创建一对扩展方法?像

这样的方法
static void SetProperty<T>(this object, string propertyName, T propertyValue) 
static T GetProperty<T>(this object, string propertyName)

用法不会像你的问题所描述的那样:

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

答案 1 :(得分:-1)

属性对象中的动态值:

public dynamic propertyName {
   get; set;
}

要通过名称获取属性,您需要在类中实现索引器 https://www.geeksforgeeks.org/c-sharp-indexers/