c# - 将 Func<T, String> 转换为 Func<T, bool>

标签 c# func

我想我的思绪正在爆炸,试图弄清楚 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/

相关文章:

sql函数添加每行值

c# - 用 Func 替换 MongoDB 查询中的 lambda 表达式

function - os.O_TRUNC 的作用是什么?

c# - 是否可以在 vector3 中包含一个变量?

需要 C# 简单 DataSocket 示例

c# - NHibernate 和奇数 "Session is Closed!"错误

c# - 如何从位图中将图像放入图片框中

ios - 如何让 Swift 循环无限期(永远)运行?

c# - Moq It.IsAnyType 不适用于具有泛型类型返回任务的 Func

c# - 如何在 .NET Core 2.1 中使用 String.Create 的示例