.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 之间的调用不的主要内容,如果未能解决你的问题,请参考以下文章

c# MoreLinq 之 Aggregate

在 Net6 IF 语句中取消引用可能为空的引用

微服务专题之.Net6中集成消息队列-RabbitMQ中直接路由模式

Net 6 nullable 没有对所有类型发出警告[关闭]

如何通过 Linq 将集合拆成多个块?

服务端表格组件GcExcel V5.0发布,全面支持.NET6,让您同步享受性能极致提升