我想我的想法正在爆发,试图找出Funcs ......如果这没有意义,我道歉,现在它对我有意义,但它已经是漫长的一天......
1)假设你有一个func,它接受T并输出一个字符串:
Func<T, string>
Run Code Online (Sandbox Code Playgroud)
你能把它变成一个接受T的函数并根据某些逻辑返回一个bool(在这种情况下,如果返回的字符串为空(String.IsNullOrWhiteSpace)?
Func<T, bool>
Run Code Online (Sandbox Code Playgroud)
如果给你一个,你可以做同样的事吗?
Expression<Func<T, string>>
Run Code Online (Sandbox Code Playgroud)
并需要将其转换为
Func<T, bool>
Run Code Online (Sandbox Code Playgroud)
返回true/false基于返回的字符串是否为空(String.IsNullOrWhiteSpace)?
谢谢
Car*_*ten 11
对于第一部分,您甚至可以制作一些"更高"的顺序函数:
Func<A,C> MapFun<A,B,C>(Func<A,B> input, Func<B,C> transf)
{
return a => transf(input(a));
}
Run Code Online (Sandbox Code Playgroud)
使用
Func <T,string> test = ...
var result = MapFun(test, String.IsNullOrWhiteSpace);
Run Code Online (Sandbox Code Playgroud)
(我希望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));
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的测试:
Func<int, string> test = i => i.ToString();
var result = test.ComposeWith(string.IsNullOrEmpty);
Run Code Online (Sandbox Code Playgroud)
对于第二个:我认为你可以将表达式编译成"真正的"Func,然后使用上面的代码.请参阅Expression.Compile上的MSDN文档
PS:重命名函数以更好地匹配它的意图(它的功能组成)
归档时间: |
|
查看次数: |
2685 次 |
最近记录: |