Подтвердить что ты не робот

С# неоднозначные методы расширения

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

Как я могу избавиться от этой ошибки?

4b9b3361

Ответ 1

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

Вы должны использовать только один из них - ссылку, добавляющую EnumerableExtensionMethods или LinqKit.

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

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

LinqKit.Extensions.ForEach(collection, action);

Или:

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

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

Ответ 2

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

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

ForEach<Domain>( ... );

использование

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