C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C#中的Monadic理解语法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
几天前我一直在# haskell IRC房间里闲逛,有人提到C#具有进行monadic理解的语法.这是什么意思?

如果我理解正确的话,monadic理解只是对绑定操作进行排序的一种方式,这听起来像是一种符号?那是对的吗?

问题是我在C#中没有看到这个.据我所知IEnumerable< T>是一个monad,其中SelectMany是它的绑定函数,因为它的签名是A – > IEnumerable的<乙取代.只需一点想象力,我们就可以做到

from x in xs
from y in ys

这转化为(我不是100%肯定在这里)

xs.SelectMany(x => ys.Select(y => y),(x,y) => ...)

但即使这是真的,我们将LINQ视为monad理解语法,它仍然只适用于IEnumerable< T>.我们在C#中有其他monad,比如Task< T>,但是我们如何在那些上使用LINQ?

这个问题中的许多假设可能是完全错误的,因为我仍然试图掌握一些monad神奇的东西.如果我错了请纠正我:)

解决方法

LINQ查询语法只是语法糖,并且对IEnumerable<>一无所知,这就是为什么你可以将它用于其他事情.

如果检查C# language specification,它将描述如何在7.16.2节中转换LINQ的查询表达式

您的具体示例描述为

from x1 in e1
from x2 in e2
select v
( e1 ) . SelectMany( x1 => e2,( x1,x2 ) => v )

因此,使用示例中的变量名称,任何具有方法Treturned SelectMany(Func< Tx,Tys>,Func< Tx,Ty,Treturned>)的xs都可以在类似的语句中使用

Treturned returned =
    from x in xs
    from y in ys
    select r;

这将完全编译时

Treturned returned = xs.SelectMany(x => ys,y) => r);

是的,这是xs上存在这方法的任何时候. SelectMany存在于IEnumerable<>的事实并不妨碍我们为其他类型配备具有相同名称方法或扩展方法.

C#可以从它知道xs是什么的事实推断lambdas的类型,并且从中可以查找类型到xs的SelectMany的参数.

大佬总结

以上是大佬教程为你收集整理的C#中的Monadic理解语法全部内容,希望文章能够帮你解决C#中的Monadic理解语法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: