大佬教程收集整理的这篇文章主要介绍了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神奇的东西.如果我错了请纠正我:)
如果检查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,请注明来意。