当前位置:  开发笔记 > 编程语言 > 正文

有条件的去引用运算符在C#中是一件好事吗?

如何解决《有条件的去引用运算符在C#中是一件好事吗?》经验,为你挑选了0个好方法。

在函数式语言中,通常有一个Maybemonad,它允许你在一个对象上链接多个调用并让整个表达式返回None/ null如果链的任何部分评估为空,而不是典型的NullReferenceException你通过链接调用来获取C#对象可以为null.

这可以通过编写Maybe一些扩展方法来实现,以允许使用查询理解在C#中进行类似的行为,这在使用可选元素/属性处理XML时非常有用,例如

var val = from foo in doc.Elements("foo").FirstOrDefault().ToMaybe()
          from bar in foo.Attribute("bar").ToMaybe()
          select bar.Value;

但是这种语法有点笨拙且不直观,因为人们习惯于处理Linq中的序列而不是单个元素,并且它会给你留下一个Maybe而不是T最后一个.有条件的去引用运算符(例如..)是否足以使其成为语言?例如

var val = doc.Elements("foo").FirstOrDefault()..Attribute("bar")..Value;

条件去引用将扩展为:

object val;
var foo = doc.Elements("foo").FirstOrDefault();
if (foo != null)
{
    var bar = foo.Attribute("bar");
    if (bar != null)
    {
        val = bar.Value;
    }
    else
    {
        val = null;
    }
}

我可以看到,这可能会导致可怕的滥用,例如..在任何地方使用以避免使用NullReferenceException,但另一方面,如果使用得当,它可能在很多情况下非常方便.思考?

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有