C# 如何将参数传递给Expression.New()?
我使用这段代码创建了一个编译表达式来构造一个对象:C# 如何将参数传递给Expression.New()?,c#,lambda,C#,Lambda,我使用这段代码创建了一个编译表达式来构造一个对象: var exp = Expression.Lambda<Func<IMyInterface>>(Expression.New(myType)).Compile(); exp(); var exp=Expression.Lambda(Expression.New(myType)).Compile(); exp(); 但是现在我想给它添加一个参数,基本上构造函数将键入someobjectobj作为参数 Expressio
var exp = Expression.Lambda<Func<IMyInterface>>(Expression.New(myType)).Compile();
exp();
var exp=Expression.Lambda(Expression.New(myType)).Compile();
exp();
但是现在我想给它添加一个参数,基本上构造函数将键入someobjectobj
作为参数
Expression.New()。但是我不知道如何构建它们,或者如何传入对象实例
有人能帮忙吗?您只需使用Expression.Parameter
创建一个ParameterExpression
。然后使用其他表达式,如ConstantExpression
或BinaryExpression
这只是一个简单的例子:
class Program
{
static void Main(string[] args)
{
var lambda = LambdaExpressionWithParameters();
MyClass1 c1 = new MyClass1() { Name = "Hans" };
MyClass2 c2 = new MyClass2() { Name = "Peter", Value = 42 };
var b1 = lambda.DynamicInvoke(c1);
var b2 = lambda.DynamicInvoke(c2);
}
static Delegate LambdaExpressionWithParameters()
{
ParameterExpression pex = Expression.Parameter(typeof(IMyInterface));//IMyInterface as Parameter
ConstantExpression cex = Expression.Constant("Peter");//Constant "Peter"
MemberExpression mex = Expression.PropertyOrField(pex, "Name");//Property Name of IMyInterface
BinaryExpression bex = Expression.Equal(mex, cex);
return Expression.Lambda(bex, pex).Compile();
}
}
class MyClass1 : IMyInterface
{
public string Name { get; set; }
}
class MyClass2 : IMyInterface
{
public string Name { get; set; }
public int Value { get; set; }
}
public interface IMyInterface
{
string Name { get; set; }
}
您正在尝试传递对现有对象的引用吗?如果不是Expression.New(Type Type)将调用指定类型的无参数构造函数,但是需要注意的是,这将创建一个新的对象实例,在这里可能不合适,但为了帮助我,我想我需要做更多的细化。嗯,google返回关于SO fo“Expression.New”C#passing parameters的答案(第一个结果中的答案中有一个使用表达式的解决方案)Microsoft Docs指的是传递我在上面提到的类型的重载。应该注意的是,这仅在创建新对象实例时才起作用。我仍在搜索符合您要求的任何内容。不过,我脑子里想不起来什么。