也许/ C#中的Option monad

时间:2015-03-18 15:52:47

标签: c# monads option maybe

2015年,C#中是否还有“官方”monad monad?理想情况下,它可以使用Scala的Option,Some和None类型。

C#似乎拥有所需的一切,即共同/逆转和lambda。

我问这个是因为我最近开始在使用Unity的公司工作,而且我遇到了很多延迟初始化。为了避免NullPointerException,我想邀请他们进入monad世界。有关于此的任何想法,还是我们应该以另一种方式处理这个问题?

1 个答案:

答案 0 :(得分:1)

就“官方”方法而言,请记住,如果您使用的是C#6,则可以使用null-conditional operator

var myVal = possiblyNull?.thisToo?.andThis?.value;

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

var myVal = possiblyNull.IfNotNull(v => v.doTheThing())
                        .IfNotNull(theThing => theThing.TheProperty);