Question:
How to pass predicates as arguments to my methods?I want to use predicates as test methods and pass them to a general test.
Answer:
Use the dotNet Predicate<T> Type. This is a delegate of the form: bool someMethod(T t);
Here is an example
static void Main(string[] args) { Program p = new Program(); Predicate<string> vow = new Predicate<string>(s => p.HasVowels(s)); p.TestUsingPredicate(vow); Console.WriteLine(); Predicate<string> upper = new Predicate<string>(s => p.HasUppercaseLetters(s)); p.TestUsingPredicate(upper); Console.ReadLine(); } void TestUsingPredicate(Predicate<string> yourStringTest) { string[] parts = new string[4] { "baal", "Saul", "cyly", "Brünhym" }; IEnumerable<string> selection = parts.Where<string>(s => yourStringTest(s)); selection.ToList<string>().ForEach(s => Console.WriteLine(s)); } bool HasVowels(string s) { Regex reg = new Regex("a|e|i|o|u"); return reg.IsMatch(s); } bool HasUppercaseLetters(string s) { return s.Any<char>(c => c.ToString() == c.ToString().ToUpper()); }
The result here is:
{"baal", "Saul", "cyly", "Brünhym"}
HasVowels returns:
baal
Saul
HasUppercaseLetters returns :
Saul
Brünhym
No comments:
Post a Comment