C#模糊扩展方法

时间:2011-11-03 20:21:17

标签: c# extension-methods

LinqKit的ForEach扩展程序IEnumerableSystem.Collections.Generic.IEnumerable冲突。

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

如何摆脱这个错误?

2 个答案:

答案 0 :(得分:22)

在框架中,

Enumerable未声明ForEach()的扩展名。这两个都来自外部参考。

您应该只考虑使用其中之一 - 添加EnumerableExtensionMethodsLinqKit的引用。

(这,顺便说一句,使用与框架相同的命名空间导致问题的一个原因 - 在这种情况下,EnumerableExtensionMethods的作者将其放在System.Linq中,这将导致问题任何时候你使用Linq并且你有命名空间冲突。)

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

LinqKit.Extensions.ForEach(collection, action);

或者:

System.Linq.EnumerableExtensionMethods.ForEach(collection, action);

话虽如此,我个人只会使用foreach循环来处理元素。

答案 1 :(得分:0)

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

所以,而不是使用

ForEach<Domain>( ... );

使用

LinqKit.Extensions.ForEach<Domain>( ... );