.net6 & MoreLinq:System.Linq.Enumerable.DistinctBy 和 MoreLinq.MoreEnumerable.DistinctBy 之间的调用不明确

.net6 & MoreLinq : Call is ambiguous between System.Linq.Enumerable.DistinctBy and MoreLinq.MoreEnumerable.DistinctBy

最近我升级了我的一个项目以使用 .NET 6。早些时候我使用 MoreLinq library to use DistinctBy() 将其应用于特定的 属性.

现在,当我将 TargetFramework 升级到 .NET 6 时,此更改带来了对 DistinctBy() 的内置支持。

现在编译器混淆了 DistinctBy() 需要 select,我不能依赖 System.Linq,因为删除 using MoreLinq 会导致其他多个错误。

我知道如果我们在相同方法之间遇到歧义,那么我们可以使用 using alias,但我不确定如何将 using alias 用于 Linq 扩展方法。

错误如下:

我可以在下面复制同样的问题fiddle

Try online

您不能为扩展方法设置别名,但您可以像普通方法一样调用扩展,使用完整的命名空间。毕竟,扩展方法实际上只是语法糖。例如(使用您在 fiddle 中提供的相同数据):

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);

为避免在使用 MoreLinq 时发生冲突,同时仍将它们用作扩展方法,您可以像这样导入您需要的 MoreLinq 方法:

using static MoreLinq.Extensions.LagExtension;
using static MoreLinq.Extensions.LeadExtension;

因此,在您的情况下,您只需从您的使用中删除 MoreLinq,然后在文件中单独导入您需要的任何 MoreLinq 扩展方法,如上所示。

您可以在 MoreLinq Github page

上阅读它