通过反射创建表达式<Func <T,object >>变量

Kor*_*gan 6 c# reflection lambda

我创建了以下类:

public class Person
{
     public string FirstName { get; set; }
     public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我能够将以下语句设置为方法参数:

myClass.SetFieldName<Person>(p => p.LastName);
Run Code Online (Sandbox Code Playgroud)

参数的类型是:

Expression<Func<Person, object>>
Run Code Online (Sandbox Code Playgroud)

现在我想要完成的是为反射找到的属性调用SetFieldName方法.想象一下,我有一个PropertyInfo实例(对于Person.LastName).我尝试使用Lambda方法创建Expression,但是我失败了.

如果你可以帮助我,那将是非常好的.

此致,Koray

Pau*_*ing 2

// reflected field name
string fieldName = "LastName";

// create the parameter of the expression (Person)
ParameterExpression param = Expression.Parameter(typeof(Person), string.Empty);

// create the expression as a get accessor of a particular 
// field of the parameter (p.LastName)
Expression field = Expression.PropertyOrField(param, fieldName);
Run Code Online (Sandbox Code Playgroud)

  • 您好,我需要将创建的表达式作为参数传递给 SetFieldName 方法。但是您创建的表达式是 Expression 类型,它与 Expression&lt;Func&lt;Person, object&gt;&gt; 不兼容。 (3认同)