c# .net6中 func(i=>i.Id) 如何获取i字段名
时间: 2024-02-18 16:03:23 浏览: 112
在 C# 中,获取一个 lambda 表达式中的参数的名称可以通过一些技巧来实现,但是这种技巧通常是比较复杂和不可靠的。因为 lambda 表达式在编译时会被编译成一个委托类型,参数的名称不会被保留,所以在运行时很难获取。
不过,如果您想要获取一个对象的成员名称,可以使用上述方法中的 `nameof` 运算符,例如:
```csharp
class MyClass
{
public int Id { get; set; }
}
MyClass obj = new MyClass();
string fieldName = nameof(obj.Id); // "Id"
```
在上面的示例中,我们定义了一个 `MyClass` 类并创建了一个对象 `obj`,然后使用 `nameof` 运算符获取了 `obj.Id` 属性的名称,这个名称就是 `Id`。
如果您需要在 lambda 表达式中使用对象的成员名称,可以考虑使用字符串常量或枚举值来代替成员名称,例如:
```csharp
class MyClass
{
public int Id { get; set; }
}
string fieldName = "Id";
Func<MyClass, int> func = i => i.GetType().GetProperty(fieldName).GetValue(i) as int;
int fieldValue = func(new MyClass { Id = 123 }); // 123
```
在上面的示例中,我们使用字符串常量 `"Id"` 来代替成员名称,并使用反射来获取对象 `i` 的 `Id` 属性的值。这种方法需要在运行时使用反射来获取属性值,因此效率较低,并且需要处理一些可能出现的异常情况。
阅读全文