FUNC<>动态添加额外参数

时间:2018-05-18 12:51:15

标签: c#

如何在Func<>表达式中添加额外参数?类似的东西:

Func<char, bool> myPredicate = (x) => (char.IsLetter(x) || x == 'X');

...

"abc".All(x => char.IsDigit(x) || myPredicate);

但是我收到了错误

运营商'||'不能应用于'bool'类型的操作数和Func&lt; char,bool&gt;

2 个答案:

答案 0 :(得分:6)

您需要像这样调用myPredicate函数:

"abc".All(x => char.IsDigit(x) || myPredicate(x));

答案 1 :(得分:2)

或者,这个其他方法呢?

var text = "abc";

var predicates = new Func<char, bool>[] { 
    x => char.IsLetter(x) || x == 'X', 
    char.IsDigit 
};

var result = predicates.Any(text.All);

// Outputs TRUE 
Console.WriteLine(result);

此外,如果您需要检查许多特定字符,可以使用curried参数创建charEquals

var text = "abc";

// More type inference to generalize charEquals to just equals, please!
Func<char, Func<char, bool>> charEquals = ca => cb => ca == cb;

var predicates = new Func<char, bool>[] { 
    char.IsLetter, 
    charEquals('X'),
    charEquals('Y'),
    charEquals('Z'),
    char.IsDigit 
};

var result = predicates.Any(text.All);

Console.WriteLine(result);