c# 接受 i=>new {}的委托类型
时间: 2024-02-18 14:03:42 浏览: 81
您好,C# 中可以使用 Func<T, TResult> 委托类型来接受 i=>new {} 的委托类型。其中,T 表示输入参数的类型,TResult 表示返回值的类型。例如,可以使用以下方式定义一个接受 i=>new {} 的委托类型的 Func 委托:
```
Func<int, object> func = i => new { Value = i };
```
该委托可以接受一个 int 类型的参数,并返回一个包含 Value 属性的匿名对象。
相关问题
c#中 什么方法可以接受i=>new {}
在 C# 中,可以使用 Func<T> 委托类型来接受 i=>new {} 的委托类型。该委托类型表示一个不带参数的方法,并且返回一个 TResult 类型的结果。在 i=>new {} 的委托中,不需要输入参数,只需要返回一个匿名对象即可。因此,可以使用以下方式定义一个接受 i=>new {} 的委托类型的 Func 委托:
```
Func<object> func = () => new { Property1 = "Value1", Property2 = "Value2" };
```
该委托可以不接受任何参数,并返回一个包含 Property1 和 Property2 属性的匿名对象。在使用时,可以直接调用该委托来获取该匿名对象的值,例如:
```
var result = func();
Console.WriteLine(result.Property1); // 输出 "Value1"
```
c# .net6中 func(i=>i.Id) 如何获取i字段名
在 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` 属性的值。这种方法需要在运行时使用反射来获取属性值,因此效率较低,并且需要处理一些可能出现的异常情况。
阅读全文