C# 如何通过动态lambda和IL创建对象的新实例?
我知道C# 如何通过动态lambda和IL创建对象的新实例?,c#,delegates,lambda,expression,il,C#,Delegates,Lambda,Expression,Il,我知道Activator.CreateInstance()可以创建对象的新实例。但是我正在寻找一种通过IL和Expression创建实例的方法。我想我可以创建一个动态lambda来创建一个类型的实例,并缓存lambda来加速对象初始化。我说得对吗?您能帮助我吗?您可以使用表示对象的创建。您可以向它传递具有无参数构造函数的类型,或者传递构造函数信息,以及表示构造函数参数的表达式。如果要返回一个对象,并且希望它也适用于值类型,则还需要添加一个表达式。Convert() 综上所述,相当于Activat
Activator.CreateInstance()
可以创建对象的新实例。但是我正在寻找一种通过IL
和Expression
创建实例的方法。我想我可以创建一个动态lambda来创建一个类型的实例,并缓存lambda来加速对象初始化。我说得对吗?您能帮助我吗?您可以使用表示对象的创建。您可以向它传递具有无参数构造函数的类型
,或者传递构造函数信息
,以及表示构造函数参数的表达式。如果要返回一个对象
,并且希望它也适用于值类型,则还需要添加一个表达式。Convert()
综上所述,相当于Activator.CreateInstance()
的代码可能如下所示:
object CreateInstance(Type type)
{
return Expression.Lambda<Func<object>>(
Expression.Convert(Expression.New(type), typeof(object)))
.Compile()();
}
可以使用来表示对象的创建。您可以向它传递具有无参数构造函数的类型
,或者传递构造函数信息
,以及表示构造函数参数的表达式。如果要返回一个对象
,并且希望它也适用于值类型,则还需要添加一个表达式。Convert()
综上所述,相当于Activator.CreateInstance()
的代码可能如下所示:
object CreateInstance(Type type)
{
return Expression.Lambda<Func<object>>(
Expression.Convert(Expression.New(type), typeof(object)))
.Compile()();
}
谢谢,我明白了。那么,如果constractor有一些参数,我如何提供主题呢?另一个问题是,我在哪里可以了解表达式
?你在哪里学的?提前感谢您需要了解的关于各种.Net类型的所有信息,包括。正如我所说,您可以将参数作为New()
方法的参数提供给构造函数,可能使用Expression.Constant()
。谢谢我理解它。那么,如果constractor有一些参数,我如何提供主题呢?另一个问题是,我在哪里可以了解表达式
?你在哪里学的?提前感谢您需要了解的关于各种.Net类型的所有信息,包括。正如我所说,您可以向构造函数提供参数作为New()
方法的参数,可能使用Expression.Constant()
。