很好地处理空值的语法

时间:2013-08-20 10:34:18

标签: c#

当返回一个可能 null 的对象时,我一定不会去(它的名字是什么?!)非常惊讶的操作符: ?? like如此。

return hazaa ?? new Hazaa();

当我返回对象的属性(如果存在)时会出现问题,否则会出现一些默认值。并不是要在父对象上进行空值检查。今天我很喜欢。

return hazaa != null
  ? hazaa.Property
  : String.Empty;

我认为这不是最优的语法,我希望它更紧凑(但仍然很容易理解,因为该属性已正确实现),如此。

return (hazaa ?? new Hazaa()).Property;

但是,我不喜欢括号,我正在寻找一种省略它们的语法,仍然是紧凑的。 C#中有这样的东西吗?我正在寻找类似的东西。

return hazaa ?.Property :String.Empty;

然后,思考这个问题。

return hazaa ?.Property :.BackUpProperty;

我可以创建自己的属性层,它给了我这样的行为,但这只是隐藏了这个问题。 :)

2 个答案:

答案 0 :(得分:3)

也许monad可能是一种可能的选择。

根据实施情况,它可能如下所示:

May.Be(hazaa, x => x.Property, string.Empty);

May.Be(hazaa).Select(x => x.Property, string.Empty);

答案 1 :(得分:2)

如果您对此主题感兴趣,您应该对monad进行一些阅读。特别是Maybe monad。这应该让你开始:http://devtalk.net/csharp/chained-null-checks-and-the-maybe-monad/

遗憾的是,没有内置语法来简化C#中的空值检查。