Arg*_*ons 3 c# reflection.emit .net-3.5
我有一个集会和一些课程.我要做的是创建一个类的实例并以通用方式填充其属性,如:
public T FillObject(IDictionary<string,object> values)
{
/// CREATE INSTANCE
/// FILL THE PROPERTIES WITH THE VALUES
}
Run Code Online (Sandbox Code Playgroud)
反射是最好的方法,但它太慢了,相反我听说Reflection.Emit更快,所以,有没有办法实例化类并用Reflection.Emit填充它的属性?
在此先感谢您的帮助.
在这个场合,我建议使用HyperDescriptor ; 它就像反射一样,但是由于IL的产生在性能中间被抛出; 那么,你只需使用常规的组件模型代码:
object obj = Activator.CreateInstance(typeof(T));
var props = TypeDescriptor.GetProperties(typeof(T));
foreach(var pair in data)
{
props[pair.Key].SetValue(obj, pair.Value);
}
Run Code Online (Sandbox Code Playgroud)
编辑; 对于2012年的更新,FastMember涉及较少的抽象:
var accessor = TypeAccessor.Create(typeof(T));
foreach(var pair in data)
{
accessor[obj, pair.Key] = pair.Value;
}
Run Code Online (Sandbox Code Playgroud)
除了更直接之外,FastMember还可以使用正确的dynamic类型 - 而不仅仅是反射.