用于很好地处理null值的语法

本文关键字:语法 null 处理 很好 用于 | 更新日期: 2023-09-27 18:28:28

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

return hazaa ?? new Hazaa();

当我返回对象的一个属性(如果它存在的话)和一些默认值时,问题就出现了。这并不是说要对父对象进行null检查。今天我真的很喜欢。

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

我认为这是一个不太理想的语法,我希望它更紧凑(但仍然很容易理解,因为属性实现得很好)

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

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

return hazaa ?.Property :String.Empty;

然后,转念一想,像这样的事情。

return hazaa ?.Property :.BackUpProperty;

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

用于很好地处理null值的语法

A也许monad是一个可能的替代方案。

根据实现情况,它可能看起来像这样:

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

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

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

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