2010-08-03 2 views
8

Ceci est une question générale, mais voici le cas précis, je suis à la recherche d'une solution à:Méthode avec prédicats comme paramètre

J'ai un Dictionary<int, List<string>> Je veux appliquer différents prédicats. Je veux une méthode qui peut prendre en charge plusieurs requêtes LINQ comme ceux-ci:

from x in Dictionary 
where x.Value.Contains("Test") 
select x.Key 

from x in Dictionary 
where x.Value.Contains("Test2") 
select x.Key 

Je suis à la recherche d'une méthode comme ceci:

public int GetResult(**WhatGoesHere** filter) 
{ 
    return from x in Dictionary.Where(filter) 
      select x.Key; 
} 

A utiliser comme ceci:

int result; 

result = GetResult(x => x.Value.Contains("Test")); 
result = GetResult(x => x.Value.Contains("Test2")); 

Quelle est la syntaxe correcte pour WhatGoesHere?

+0

Woops, j'ai raté le bon type. J'ai supprimé ma réponse. La réponse de Mark Byer est bonne. – zneak

Répondre

14

Vous pouvez utiliser Func<KeyValuePair<int, List<string>>, bool>:

public int GetResult(Func<KeyValuePair<int, List<string>>, bool> filter) 
{ 
    return (from x in Dictionary 
      where filter(x) 
      select x.Key).FirstOrDefault(); 
} 

Ou bien: Predicate<KeyValuePair<int, List<string>>>. Je pense que Func qui a été introduit dans .NET 3.5 est preferred ces jours-ci.

Vous utilisez x pour signifier deux choses différentes dans votre exemple final, ce qui provoque une erreur de compilation. Essayez de changer l'un des x s à autre chose:

x = GetResult(y => y.Value.Contains("Test1")); 
+0

Ah, je pensais que j'étais sur le bon chemin. Je faisais Predicate >> mais je suppose que cela n'aurait pas beaucoup de sens. Merci. – Ocelot20

Questions connexes