如何在Func<>
表达式中添加额外参数?类似的东西:
Func<char, bool> myPredicate = (x) => (char.IsLetter(x) || x == 'X');
...
"abc".All(x => char.IsDigit(x) || myPredicate);
但是我收到了错误
运营商'||'不能应用于'bool'类型的操作数和Func&lt; char,bool&gt;
答案 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);