.NET6集成MoreLinq时DistinctBy方法调用歧义如何解决?
.NET 6与MoreLinq同名DistinctBy方法冲突解决方案
问题背景
项目升级到.NET 6后,原生System.Linq新增的DistinctBy()扩展方法和MoreLinq库提供的同名方法产生调用歧义,无法直接删除using MoreLinq指令避免冲突。
解决方法
方案1:显式指定方法来源(无需调整现有引用结构)
扩展方法本质是静态类的静态方法,你可以为两个对应静态类配置命名空间别名,调用时直接通过别名指定要使用的版本即可:
- 在文件顶部的using区域配置别名:
// 配置别名区分两个实现类 using NativeLinq = System.Linq.Enumerable; using MoreLinq = global::MoreLinq.MoreEnumerable;
- 调用时替换原来的扩展方法写法:
- 调用.NET 6原生DistinctBy:
NativeLinq.DistinctBy(集合变量, x => x.去重属性) - 调用MoreLinq提供的DistinctBy:
MoreLinq.DistinctBy(集合变量, x => x.去重属性)
方案2:保留扩展方法调用形式,全局指定优先级
如果你不想修改现有代码的集合.DistinctBy()写法,可以调整命名空间导入顺序,让编译器优先匹配你需要的版本:
如果要优先使用原生.NET 6的实现,在全局Usings配置(或文件顶部的using区域)将using System.Linq;放在using MoreLinq;之后即可,C#编译器会优先选择后导入命名空间下的扩展方法。如果要优先使用MoreLinq的版本,就把using MoreLinq;放在using System.Linq;之后。
内容的提问来源于stack exchange,提问作者Prasad Telkikar
相关产品推荐
相关产品推荐

