I have a line of code that has been written using MoreLinq here :
var maxPage = _pageState?.Value?.Pages?.MaxBy(p => p.Type.Grids["desktop"].ColCount)?.FirstOrDefault();
Because my solution is using both MoreLinq and Linq I am getting the following error:
The call is ambiguous between the following methods or properties: 'MoreLinq.MoreEnumerable.DistinctBy<TSource, TKey>(System.Collections.Generic.IEnumerable, System.Func<TSource, TKey>)' and 'System.Linq.Enumerable.DistinctBy<TSource, TKey>(System.Collections.Generic.IEnumerable, System.Func<TSource, TKey>)
I have tried adding the following static extension to my document:
MoreLinq.Extensions.AppendExtension
but this errors out FirstOrDefault()
at the end of the line with the following error:
'MyClass' does not contain a definition for 'FirstOrDefault' and no accessible extension method 'FirstOrDefault' accepting a first argument of type 'MyClass' could be found (are you missing a using directive or an assembly reference?)
I have tried also removing MoreLinq but I get the same does not contain a defition for FirstOrDefault Error.
What is the best way to solve this issue?
CodePudding user response:
MaxBy
and DistinctBy
methods were introduced in .NET 6 which will result in the aforementioned problem if you are using MoreLinq
. If you don't need any MoreLinq
methods just remove it or replace with using System.Linq;
(if you are not using the global/implicit usings).
If you still need both you can use the trick with splitting imports on before and after namespace (though it can be a bit esoteric):
// ... common imports
using MoreLinq.Extensions;
namespace YourNameSpace;
{
using System.Linq; // default LINQ methods will be preferred
// ... code
}
Or use static imports for only needed methods (see @github):
using static MoreLinq.Extensions.BatchExtension; // import classes holding needed extensions