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

按名称动态获取/设置c#对象属性的最简单方法,c#,dynamic,reflection,C#,Dynamic,Reflection,我有几个不同类型的对象以及需要获取和设置的属性的名称。在像javascript这样的语言中,这很简单,因为我可以使用indexor语法获取和设置值 obj2[propertyName] = obj1[propertyName]; 在c#中,这并不容易。我知道我可以使用反射,但这需要很多代码。我知道有动态对象,但它们不会自动按名称引用属性。在任意类型的对象(即它们具有属性,但不共享公共接口或基类)上按名称动态获取和设置属性的最简单方法是什么 更新:进一步研究后,它似乎是FastMember、Im

我有几个不同类型的对象以及需要获取和设置的属性的名称。在像javascript这样的语言中,这很简单,因为我可以使用indexor语法获取和设置值

obj2[propertyName] = obj1[propertyName];
在c#中,这并不容易。我知道我可以使用反射,但这需要很多代码。我知道有动态对象,但它们不会自动按名称引用属性。在任意类型的对象(即它们具有属性,但不共享公共接口或基类)上按名称动态获取和设置属性的最简单方法是什么


更新:进一步研究后,它似乎是FastMember、Impromptu、Dynametiy,或者可能是FSharp。如果有人有任何想法,Dynamic可以在这里提供帮助…

冒着过度简化解决方案的风险,为什么不创建一对抽象反射代码的对象类型的扩展方法呢?方法如

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

属性对象中的动态值:

public dynamic propertyName {
   get; set;
}
要按名称获取属性,需要在类中实现索引器

@Eser我知道Automapper,并在我的项目中的其他地方使用它,但在这种情况下,我需要动态获取属性,根据结果做出决策,然后设置它们。这是一个不同的用例。是的……但这与反射有什么本质上的区别呢?显然,我不会每次都复制反射代码,我会将它抽象成类似的东西。我的问题是,最简单的方法是什么?这并不罕见,动态对象或其他c#机制不提供更现代的方法吗?因为我没有直接的答案,我只是猜测。但在我看来,由于我们处理的是强类型编译代码,编译器需要支持您建议的语法。也就是说,我认为它不存在于C。我执行您描述的任务的唯一方法就是使用反射。因为这里肯定会有很多问题,特别是如何通过反射获取和设置属性,我想你不是在问如何使用反射;因为这将进一步讨论而不是直接回答,所以它的正确位置应该在注释部分。。。是和否,DLR绝对是一个东西,这在一定程度上意味着这些情况。我认为应该有类似于
varfoo=newdynamicaccessors(obj)的东西;foo[“Prop”]=123
,我只是不知道正确的语法。欢迎来到stackoverflow,感谢您的参与。不幸的是,这不是答案,因为它没有演示如何通过属性名获取和设置内容,只是有一个动态类型。索引器属性与此无关,只是两者都使用方括号。
public dynamic propertyName {
   get; set;
}