【发布时间】:2010-08-03 09:28:20
【问题描述】:
我正在使用以下代码从匿名类型中检索命名成员。有什么方法可以将以下代码转换为使用 lambda 表达式来实现这一点,或者至少允许调用代码使用 lamda,即使“深入”我必须使用字符串?
private T GetAnonymousTypeMember<T>(object anonymousType, string memberName) where T: class
{
var anonTypesType = anonymousType.GetType();
var propInfo = anonTypesType.GetProperty(memberName);
return propInfo.GetValue(anonymousType, null) as T;
}
添加:
这就是anonymousType 到达的方式。 GetAnonymousTypeMember 方法是类的私有方法,其唯一的公共方法声明如下:
public void PublishNotification(NotificationTriggers trigger, object templateParameters)
我称这个方法为:
PublishNotification(NotificationTriggers.RequestCreated, new {NewJobCard = model});
new {NewJobCard = model} 是作为anonymousType 传递给GetAnonymousTypeMember 的内容。
【问题讨论】:
-
你想用什么代替?是否有其他方式来指代成员?
-
类似 GetAnonTypeMember(m => m.Person)
-
为什么不直接使用
m.Person?当方法唯一要做的就是调用 lambda 表达式时,为什么需要在方法中执行此操作? -
@Guffa,匿名类型被声明为一个对象,它没有像“Person”这样的属性可以访问,它的内容是可变的,所以我没有什么可以转换为访问属性。
-
如果是动态对象,
myObj.Person就可以了,对吧?但是您试图确保它是某种类型,这就是原因吗?在这种情况下,请使用演员表:(Person)myObj.Person。