¿Qué es un Delegado Predicado y dónde debería usarse?
Me puedes explicar:
- ¿Qué es un delegado predicado?
- ¿Dónde deberíamos usar predicados?
- ¿Alguna mejor práctica al utilizar predicados?
Se agradecerá el código fuente descriptivo.
Un predicado es una función que devuelve true
o false
. Un delegado de predicado es una referencia a un predicado.
Básicamente, un delegado de predicado es una referencia a una función que devuelve true
o false
. Los predicados son muy útiles para filtrar una lista de valores; aquí hay un ejemplo.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
Predicate<int> predicate = new Predicate<int>(greaterThanTwo);
List<int> newList = list.FindAll(predicate);
}
static bool greaterThanTwo(int arg)
{
return arg > 2;
}
}
Ahora, si estás usando C# 3, puedes usar una lambda para representar el predicado de una manera más limpia:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
List<int> newList = list.FindAll(i => i > 2);
}
}
A partir de la respuesta de Andrew con respecto a c#2 y c#3... también puedes hacerlos en línea para una función de búsqueda única (ver más abajo).
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
List<int> newList = list.FindAll(delegate(int arg)
{
return arg> 2;
});
}
}
Espero que esto ayude.
Sólo un delegado que devuelve un valor booleano. Se usa mucho en listas de filtrado, pero se puede usar donde quieras.
List<DateRangeClass> myList = new List<DateRangeClass<GetSomeDateRangeArrayToPopulate);
myList.FindAll(x => (x.StartTime <= minDateToReturn && x.EndTime >= maxDateToReturn):
Hay un buen artículo sobre predicados aquí , aunque es de la era .NET2, por lo que no se mencionan expresiones lambda allí.