.net6 & MoreLinq : System.Linq.Enumerable.DistinctBy 和 MoreLinq.MoreEnumerable.DistinctBy 之间的调用不
Posted
技术标签:
【中文标题】.net6 & MoreLinq : System.Linq.Enumerable.DistinctBy 和 MoreLinq.MoreEnumerable.DistinctBy 之间的调用不明确【英文标题】:.net6 & MoreLinq : Call is ambiguous between System.Linq.Enumerable.DistinctBy and MoreLinq.MoreEnumerable.DistinctBy 【发布时间】:2021-11-10 17:04:31 【问题描述】:最近我升级了我的一个项目以使用.NET 6
。之前我使用MoreLinq 库来使用DistinctBy()
将其应用于特定属性。
现在,当我将 TargetFramework 升级到 .NET 6
时,此更改提供了对 DistinctBy()
的内置支持。
现在编译器对需要选择哪个DistinctBy()
感到困惑,我不能依赖System.Linq
,因为删除using MoreLinq
会导致其他多个错误。
我知道如果我们在相同方法之间遇到歧义,那么我们可以使用using alias
,但我不确定如何将using alias
用于Linq 扩展方法。
这是错误:
我可以在下面的小提琴中复制同样的问题
Try online
【问题讨论】:
你可以像普通方法一样调用扩展方法,所以:MoreLinq.MoreEnumerable.DistinctBy(yourEnumerable, otherParams)
PS 您无法在小提琴中复制问题的原因是您缺少using System.Linq;
这就是OSS的美妙之处。只需 fork MoreLinq 并删除其版本的 DistinctBy
。
@DavidG,感谢您的第二条评论。我在小提琴中修复了它并更新了问题。让我试试你的第一条评论
@DavidG,您的解决方案对我有用。您可以将其添加为答案
【参考方案1】:
为避免在使用 MoreLinq 时发生冲突,同时仍将它们用作扩展方法,您可以像这样导入所需的 MoreLinq 方法:
using static MoreLinq.Extensions.LagExtension;
using static MoreLinq.Extensions.LeadExtension;
因此,在您的情况下,您可以从 usings 中删除 MoreLinq,然后在文件中单独导入您需要的任何 MoreLinq 扩展方法,如上所示。
您可以在MoreLinq Github page 上阅读有关它的信息
【讨论】:
【参考方案2】:您不能为扩展方法设置别名,但您可以像普通方法一样调用扩展,使用完整的命名空间。毕竟,扩展方法实际上只是语法糖。例如(使用您在小提琴中提供的相同数据):
var inputs = new []
new Name = "Bruce wayne", State = "New York",
new Name = "Rajnikant", State = "Tamil Nadu",
new Name = "Robert Downey jr", State = "Pennsylvania",
new Name = "Dwane Johnson", State = "Pennsylvania",
new Name = "Hritik", State = "Maharashtra"
;
var net6DistinctBy = System.Linq.Enumerable.DistinctBy(inputs, x => x.State);
var moreLinqDistinctBy = MoreLinq.MoreEnumerable.DistinctBy(inputs, x => x.State);
【讨论】:
以上是关于.net6 & MoreLinq : System.Linq.Enumerable.DistinctBy 和 MoreLinq.MoreEnumerable.DistinctBy 之间的调用不的主要内容,如果未能解决你的问题,请参考以下文章
微服务专题之.Net6中集成消息队列-RabbitMQ中直接路由模式