c#中 func(i=>i.Id) 如何获取字段名
时间: 2024-02-18 10:03:08 浏览: 25
在C#中,可以使用表达式树来获取Lambda表达式的参数和方法体。对于一条Lambda表达式i => i.Id,可以通过表达式树来获取i和i.Id两个部分的信息。具体实现可以使用Expression类的静态方法来创建表达式树,并通过表达式树访问参数和成员的信息。示例代码如下:
```csharp
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
Func<MyObject, int> func = i => i.Id;
MemberExpression memberExp = func.Body as MemberExpression;
if (memberExp != null)
{
Console.WriteLine("参数名:" + ((ParameterExpression)memberExp.Expression).Name);
Console.WriteLine("字段名:" + memberExp.Member.Name);
}
}
}
class MyObject
{
public int Id { get; set; }
}
```
在上面的代码中,首先定义了一个Lambda表达式i => i.Id,并将它赋值给一个Func委托变量。接着,使用func.Body来获取Lambda表达式的方法体,并将其转换为MemberExpression类型,这样就可以获取成员的信息。对于i.Id这个表达式,Expression.Expression属性表示参数i,Expression.Member属性表示成员Id,因此可以通过这两个属性来获取参数名和字段名。在上面的示例代码中,输出的结果为:
```
参数名:i
字段名:Id
```
这样就可以通过表达式树来获取Lambda表达式中的参数和成员信息了。