![]() |
1
20
我对生管不感兴趣,但我试着把所有的参考资料都写进了可能的单子:
然后假设您有一个对象模型,允许您按名称查找一个记录公司,然后查找该记录公司内的一个带区,该带区的一个成员,并且其中任何一个都可能返回空值,因此这可能引发空引用异常:
我们可以解决这个问题:
嘿,presto,如果这些转换中的任何一个返回空值,pixiesdrummer将为空。 如果我们可以做一些扩展方法作为运算符重载,这不是很好吗?
然后我可以像这样把我的过渡羔羊放在一起:
同样,如果System.Void被定义为一种类型,而action实际上只是func<…,void>,这不是很好吗? 更新: I blogged a little about the theory behind this . 更新2: 原始问题的另一个答案大致是“您将如何用C表示f pipe forward操作符?” 管道前进是:
换句话说,它允许您以相反的顺序编写一个函数及其第一个参数:参数后跟函数。它只是一个帮助阅读的语法助手,允许您在任何函数中使用中缀符号。 这正是C中的扩展方法。如果没有它们,我们将不得不写:
有了它们,我们可以写:
(忽略了它们也让我们省略类名的事实——这是一个奖励,但也可以用于非扩展方法,就像它在Java中一样)。 所以C已经以不同的方式解决了相同的问题。 |
![]() |
2
3
所以对于管道,我认为不需要检查空值,也不需要调用管道函数。在许多情况下,函数参数很容易接受一个空值,并由函数处理。
这是我的实现。我有
假货币的好处在于,在提供参数之后,您可以输入方法名,从而比使用lambda生成的嵌套更少。
join在最后一个位置上有IEnumerable,所以可以这样做。
下面是我的示例实现:
|
![]() |
3
1
虽然不完全一样,但你可能对我的
Push LINQ
框架。基本上在哪里
MarcGravell和我已经实现了大多数标准的Linq查询操作符,这意味着您可以针对数据源编写查询表达式,并做一些有趣的事情,比如流分组、多个聚合等。 |
![]() |
4
1
你的Pipe方法看起来非常像画眉组合器。 My implementation 其中很简单。
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |