3

当返回一个可能为的对象时,我通常不应该使用(它的正确名称是什么?!)非常惊讶的运算符:?? 像这样。

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;

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

4

2 回答 2

3

Maybe monad 可能是一个可能的选择。

根据实现,它可能如下所示:

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

或者

May.Be(hazaa).Select(x => x.Property, string.Empty);
于 2013-08-20T10:51:09.257 回答
2

如果你对这个话题感兴趣,你应该阅读一些关于 monads 的文章。特别是在Maybe单子上。这应该让你开始:http ://devtalk.net/csharp/chained-null-checks-and-the-maybe-monad/

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

于 2013-08-20T10:50:13.783 回答