我想我的思绪正在爆炸,试图弄清楚 Funcs...如果这没有意义,我道歉,现在对我来说很有意义,但已经度过了漫长的一天......
1) 假设给你一个函数,它接受 T 并输出一个字符串:
Func<T, string>
您能否将其转换为接受 T 并根据某种逻辑返回 bool 值的函数(在这种情况下,如果返回的字符串为空 (String.IsNullOrWhiteSpace)?
Func<T, bool>
2) 如果给你一个,你能做同样的事情吗
Expression<Func<T, string>>
并需要将其转换为
Func<T, bool>
根据返回的字符串是否为空 (String.IsNullOrWhiteSpace) 返回 true/false?
谢谢
最佳答案
对于第一部分,您甚至可以创建一些“高阶”函数:
Func<A,C> MapFun<A,B,C>(Func<A,B> input, Func<B,C> transf)
{
return a => transf(input(a));
}
使用
Func <T,string> test = ...
var result = MapFun(test, String.IsNullOrWhiteSpace);
(我希望 C# 类型类型推断在这里起作用)
如果你将它定义为 Func 的扩展,它会变得更容易:
public static class FuncExtension
{
public static Func<A,C> ComposeWith<A,B,C>(this Func<A,B> input, Func<B,C> f)
{
return a => f(input(a));
}
}
这是一个非常简单的测试:
Func<int, string> test = i => i.ToString();
var result = test.ComposeWith(string.IsNullOrEmpty);
对于第二个:我认为您可以将表达式编译成“真正的”Func,然后使用上面的代码。 see MSDN Docs on Expression.Compile
PS:重命名函数以更好地匹配它的意图(它是函数组合)
关于c# - 将 Func<T, String> 转换为 Func<T, bool>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7138182/