Di tutte le nuove caratteristiche di C# 2.0 forse l'uso dei predicati è stata una di quelle meno reclamizzata.
Ci sono diversi articoli che ne descrivono l'utilizzo e tra questi voglio segnalare questo, breve e "condito" con esempi.
In particolare vorrei evidenziare la possibilità di utilizzare predicati attraverso l'uso dei metodi anonimi.
Questo è utile nei casi in cui vogliamo sfruttare i metodi di Find ed Exists utilizzando come criteri di "match" dei parametri che non sono stabiliti a priori e che quindi non possiamo incapsulare nei metodi che definiscono il nostro predicato.
Nel mio caso specifico avevo bisogno di un metodo per verificare la presenza di un determinato "PermissionType" all'interno di una lista generica di "PermissionType", e questo utilizzando come criterio la proprietà "Key" della classe "PermissionType".
Ecco come ho risolto usando un predicato con metodo anonimo:
public
bool HasPermission(string key)
{
return this.Permissions.Exists(
delegate(PermissionsType pt)
{
if (pt.Key.Equals(key, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
else
{
return false;
}
} );
}