2010-08-03 22 views
8

Dies ist eine allgemeine Frage, aber hier ist der spezifische Fall, dass ich mich für eine Lösung suchen, um:Methode mit Prädikat als Parameter

Ich habe ein Dictionary<int, List<string>> ich auf verschiedene Prädikate anwenden möge. Ich möchte eine Methode, die Pflege von mehreren LINQ-Abfragen, wie diese nehmen:

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

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

Also für eine Methode, wie ich suche so:

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

Um wie so verwendet werden:

int result; 

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

Wie lautet die richtige Syntax für WhatGoesHere?

+0

Woops, ich habe den richtigen Typ vermisst. Ich habe meine Antwort gelöscht. Mark Byers Antwort ist gut. – zneak

Antwort

14

können Sie Func<KeyValuePair<int, List<string>>, bool> verwenden:

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

Oder alternativ: Predicate<KeyValuePair<int, List<string>>>. Ich denke, Func, die in .NET 3.5 eingeführt wurde, ist in diesen Tagen preferred.

Sie verwenden x, um zwei verschiedene Dinge in Ihrem letzten Beispiel zu bedeuten, und dies wird einen Kompilierungsfehler geben. Versuchen Sie einen der x s zu etwas anderem zu ändern:

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

Ah, ich dachte, ich wäre auf dem richtigen Weg. Ich machte Predicate >> aber ich denke, das würde nicht viel Sinn machen. Vielen Dank. – Ocelot20

Verwandte Themen