No puedo encontrar la forma de hacer un "buscar" en una lista que he basado en el uso de un valor que voy a pasar en tiempo de ejecución. Si ve mi código a continuación, quiero poder encontrar CustomClass en la Lista cuyo parámetro Path es igual a X, donde X se definirá en tiempo de ejecución.C# List.Find method - ¿cómo puedo pasar un valor en el predicado?
¿Alguna idea de cómo hacer un tal hallazgo en una lista? ¿O esto no es posible sin escribir un iterador y hacer el hallazgo manualmente? ¿En cuyo caso tal vez haya una colección con clave que debería usar en su lugar?
private List<CustomClass> files;
public void someMethod()
{
Uri u= new Uri(www.test.com);
CustomClass cc = this.files.find(matchesUri(u)); // WON'T LET ME DO THIS
}
private static bool matchesUri(List<CustomClass> cc, Uri _u)
{
return cc.Path == _u; }
public class CustomClass
{
private Uri path;
public Uri Path
{
get { return this.path; }
set { this.path = value; }
}
}
PS. Debo admitir que no comprendo muy bien las cosas en el predicado mana en http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx
gracias chicos - dicho sea de paso - ¿debería haber podido (si estaba más arriba en C#) resolver esto solo mirando la sintaxis del método en el doco? (es decir, Parámetros, coincidencia, Tipo: System .. ::. Predicate <(Of <(T>)>), El predicado <(Of <(T>)>) delegado que define las condiciones del elemento para buscar ... – Greg
El tipo de parámetro restringe el tipo de delegar puede pasar al método y, por lo tanto, a la firma del método o lambda que debe usar para crear ese delegado. No significa, en sí mismo, el uso de lambdas más que cualquier otro tipo de delegado. La documentación para lambdas está aquí: http://msdn.microsoft.com/en-us/library/bb397687.aspx –
Delegate es similar a un puntero de función. Al mirar la firma ('delegado bool Predicate (T obj)') puede ver que un predicado es una función (método) que toma un ** único parámetro de tipo T **, y devuelve ** bool ** . –
Groo