我尝试根据字符串参数创建匿名类型,例如
var propertyName = "Firstname";
var properyValue = "Fred";
我希望能够得到;
var myObj = new { FirstName = "Fred" };
但也有机会使用相同的功能并具有;
var propertyName = "Surname";
var properyValue = "Smith";
var myObj = new { Surname = "Smith" };
这实际上可行吗?
答案 0 :(得分:1)
匿名类型在编译时定义。它们是普通的C#类型,只是没有名称[1]。因此,您无法根据运行时信息修改其结构。
看起来你根本不想要匿名类型,真的。 ExpandoObject
听起来更像你想要的。匿名类型不应该从它们的范围中泄露 - 如果你遵循它,你就不需要像你想要的那样动态构造它们。
此外,在公开匿名类型时要小心。有一个原因是为什么它们不被允许用作方法参数和返回类型 - 这不是它们的设计目的。看来你使用dynamic
来规避这个限制,但这有很多问题;它可以停止使用.NET的任何版本(包括修补程序),并且对于当前的.NET,如果将匿名类型泄漏到不应该的位置,它将导致可访问性错误(例如,internal
匿名类型用于不同的装配)。
[1]当然,他们实际上做有一个名字,因为CLR要求类型具有名称。但是这个名字是自动生成的并且有点隐藏,而不是你应该考虑的东西。