在C#中可能/选项单子

Fel*_*lix 6 c# monads option maybe

在2015年,C#中可能有任何“官方”的monad吗?理想情况下,它将可以使用ala Scala的Option,Some和None类型。

C#似乎具有所需的所有内容,即co / contravariance和lambda。

我之所以这么问,是因为我最近开始在一家使用Unity的公司工作,并且遇到了很多延迟的初始化工作。为了避免NullPointerException,我想邀请他们进入monad世界。关于这一点有什么想法,还是我们应该简单地以其他方式处理?

JLR*_*she 1

就“官方”方法而言,请记住,如果您使用的是 C# 6,则可以使用null 条件运算符

var myVal = possiblyNull?.thisToo?.andThis?.value;
Run Code Online (Sandbox Code Playgroud)

某些 VisualStudio 模板(例如 ASP.NET MVC 项目模板)还包含IsNotNull扩展方法,它是 AjaxMinExtensions 的一部分。如果您的项目中没有这些,您可以将实现复制/粘贴到您的代码中。

var myVal = possiblyNull.IfNotNull(v => v.doTheThing())
                        .IfNotNull(theThing => theThing.TheProperty);
Run Code Online (Sandbox Code Playgroud)

  • 虽然被称为“monadic”运算符,但并不完全相同 - 如果您使用 `Maybe<T>` 或 `Option<T>` 类型,编译器将帮助您查看错过处理可能空值的地方(给你错误) (4认同)