gpt4 book ai didi

c# - 如何在泛型方法中有一个匿名返回类型?(就像 linq 中的 select 方法)

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:30 26 4
gpt4 key购买 nike

我有一个通用方法,例如:

IEnumerable<TResult> Select2<TSource, TResult>(Func<TSource, TResult> selector)

还有一个方法调用:

var r = Select2(p => new { FullName = p.FirstName + " " + p.LastName });

如何在我的方法调用中设置 TResult?在 linq 中,当您使用 from select 方法时,您可以看到结果类型为 'a enter image description here更新

例如,我有自己的 orm,在选择方法中,我生成了一个 T-Sql 选择查询。我想用我的方法定义特定的列并从我的规范中获取结果。如果我调用类似

的方法
var r=Select2<Person,?>(p=> new{Name=p.FirstName ,Family=p.LastName})

我希望生成一个带有 FirstName 和 LastName 列的选择,返回类型只有 Name 和 Family Property

最佳答案

我假设方法的签名是

TResult Select2<TSource, TResult>(Func<TSource, TResult> selector)

简单地写 var r = Select2(p => new { ... }) 是行不通的,因为编译器只能推断 TResult 的类型而不是TSource 的类型。

使通用类型显式化也不起作用,因为如您所见,您不能对匿名类型这样做。

您可以做的是以不同方式编写 lambda 来帮助编译器:

var r = Select2((Person p) => new { ... });

这样编译器就知道 TSource 的类型并且可以推断出 TResult 的类型。

关于c# - 如何在泛型方法中有一个匿名返回类型?(就像 linq 中的 select 方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33388620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com