C # неоднозначные методы расширения - PullRequest
14 голосов
/ 04 ноября 2011

LinqKit имеет метод расширения ForEach для IEnumerable, который конфликтует с System.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 ]

22 голосов
/ 04 ноября 2011

Enumerable, в рамках, не объявляет расширение для ForEach().Оба они взяты из внешних ссылок.

Вы должны рассмотреть возможность использования только одного из них - либо ссылки, которая добавляет EnumerableExtensionMethods, либо LinqKit.

(Между прочим, это одна из причин, по которой использование того же пространства имен, что и у фреймворка, вызывает проблемы - в этом случае автор EnumerableExtensionMethods поместил его в System.Linq, что приведет к любой проблеме.Когда вы используете Linq и у вас есть конфликт пространства имен.)

Если вам действительно нужно использовать этот метод, вам придется вызывать его напрямую, а не с помощью метода расширения, то есть:

LinqKit.Extensions.ForEach(collection, action);

Или:

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

При этом я лично использовал бы цикл foreach для обработки элементов.

0 голосов
/ 04 ноября 2011

Вам просто нужно полностью определить метод, который вы вызываете, как в сообщении об ошибке.

Итак, вместо использования

ForEach<Domain>( ... );

используйте

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