Este es un ejemplo sencillo de dos métodos de extensión sobrecargadelegados opcionales en C#
public static class Extended
{
public static IEnumerable<int> Even(this List<int> numbers)
{
return numbers.Where(num=> num % 2 == 0);
}
public static IEnumerable<int> Even(this List<int> numbers, Predicate<int> predicate)
{
return numbers.Where(num=> num % 2 == 0 && predicate(num));
}
}
Me gustaría ser capaz de fusionar en uno, mediante el establecimiento de un delegado a ser opcional:
public static class Extended
{
public static IEnumerable<int> Even(this List<int> numbers, Predicate<in> predicate = alwaysTrue)
{
return numbers.Where(num=> num % 2 == 0 && predicate(num));
}
public static bool alwaysTrue(int a) { return true; }
}
sin embargo, el compilador genera un error:
Default parameter value for 'predicate' must be a compile-time constant
no veo cómo mi función alwaysTrue no es constante, pero bueno, KNO compilador ws better :)
¿Hay alguna manera de hacer que el parámetro de delegado sea opcional?
Muy interesante 1 –