我需要一种将Dictionary转换为强类型对象的方法。 我知道我可以使用反射并简单地创建一个我想要的类型的新对象,然后遍历属性并分配它们。 https://dotnetfiddle.net/yz9GPd
但是..在我看来,这是效率极低的..那么,有什么好的方法可以改善此问题吗?..还有一种使用较少反射的方法(因为那通常成本很高)。 也许可以通过某种方式使用编译表达式/函数来做到这一点?
答案 0 :(得分:1)
您可以使用FastMember之类的东西,该东西正在使用Reflection.Emit映射到您的类成员,并将其名称作为字符串。与标准反射相比,它速度很快,但是如果您自己进行编写,则很难编写。
使用该库,您的示例如下所示:
Dictionary<string, object> values = new Dictionary<string, object>()
{
{ "Property1", "MyValue" },
{ "Property2", 1234 },
{ "Property3", true },
};
MyType myType = new MyType();
var accessor = TypeAccessor.Create(typeof(MyType));
foreach (var entry in values)
accessor[myType, entry.Key] = entry.Value;