0
我使用匿名類型將類型化對象的集合傳遞給TemplateResolver,其中新實例化文本模板中的指定佔位符可以從多個對象(例如,如何從匿名類型檢索強類型屬性?
var body = TemplateResolver.ResolveTemplate(template.ExternalRecipientBody, new {Sender = customer, NewJobCard = jobCard});
其中模板具有類似{Sender$Surname}
和{NewJobCard$JobNumber}
佔位符。
Inside ResolveTemplate
我需要發件人和NewJobCard強類型,而不知道要投它們。
解決方案到目前爲止
我想出了這個,到目前爲止,但不必使用字符串成員的名字厭惡。我有asked another question關於以至少方法調用lmbda'ring字符串的可能性,即使不是方法體。
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;
}
雖然我同意這是一個簡單的DTO風格類的好地方,但要小心說匿名類型只是本地的。情況並非完全如此。例如,您可以將實例傳遞給泛型方法。 – 2010-08-02 07:14:34
@Steven - 但是泛型方法接受什麼樣的「類型」?你在談論接受類型'對象'的泛型委託方法嗎? – RPM1984 2010-08-02 08:26:24
匿名類型與其他類型一樣真實。它只是不能被名稱引用。因此,例如,如果您有一個通用實用程序方法,它需要IEnumerable並返回MyList ,它會工作得很好。返回值必須保存在一個聲明爲var的變量中。 –
2010-08-02 13:20:22