首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#二义性扩展方法

C#二义性扩展方法
EN

Stack Overflow用户
提问于 2011-11-04 04:21:17
回答 2查看 7.9K关注 0票数 14

LinqKit有一个用于IEnumerable的扩展方法ForEach,它与System.Collections.Generic.IEnumerable冲突。

代码语言:javascript
复制
Error   4   The call is ambiguous between the following methods or properties: 
'LinqKit.Extensions.ForEach<Domain>(System.Collections.Generic.IEnumerable<Domain>, System.Action<Domain>)' 
and 
'System.Linq.EnumerableExtensionMethods.ForEach<Domain>(System.Collections.Generic.IEnumerable<Domain>, System.Action<Domain>)'

我怎样才能摆脱这个错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-04 04:25:13

在框架中,Enumerable没有为ForEach()声明扩展。这两个参数都来自外部参照。

您应该考虑只使用其中一个-要么是添加EnumerableExtensionMethods的引用,要么是LinqKit

(顺便说一句,这是使用与框架相同的名称空间会导致问题的原因之一--在本例中,EnumerableExtensionMethods的作者将其放在System.Linq中,这将在您使用LINQ时出现名称空间冲突时引发问题。)

如果你真的需要使用这个方法,那么你必须直接调用它,而不是使用扩展方法,例如:

代码语言:javascript
复制
LinqKit.Extensions.ForEach(collection, action);

或者:

代码语言:javascript
复制
System.Linq.EnumerableExtensionMethods.ForEach(collection, action);

也就是说,我个人只会使用foreach循环来处理元素。

票数 22
EN

Stack Overflow用户

发布于 2011-11-04 04:25:07

您只需完全限定要调用的方法,如错误消息中所示。

因此,与其使用

代码语言:javascript
复制
ForEach<Domain>( ... );

使用

代码语言:javascript
复制
LinqKit.Extensions.ForEach<Domain>( ... );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8001339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档