如何从匿名类型中检索强类型属性?

时间:2010-08-02 06:00:52

标签: c# .net anonymous-types

我正在使用匿名类型将类型化对象的集合传递给TemplateResolver,其中新实例化的文本模板中的命名占位符可以从多个对象中获取值,例如:

var body = TemplateResolver.ResolveTemplate(template.ExternalRecipientBody, new {Sender = customer, NewJobCard = jobCard});

模板中包含{Sender$Surname}{NewJobCard$JobNumber}等占位符。

ResolveTemplate内部我需要强烈输入Sender和NewJobCard,而不知道将它们转换为什么。

解决方案如此

到目前为止,我已经想出了这个,但不喜欢使用字符串成员名称。我有asked another question关于至少在方法调用中以某种方式lmbda'字符串的可能性,即使不是方法体。

    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;
    }

1 个答案:

答案 0 :(得分:1)

匿名类型只有方法范围,因此您将无法访问“ResolveTemplate”方法中的强类型属性。

你有两个选择:

  1. 箱/拆箱
  2. 咬紧牙关并宣布一个结构/类
  3. 如果您需要从多个源“解析”属性,请考虑使用OO抽象形式(接口/抽象类)来传递类型。