C#6中NULL条件运算符

早期版本的C#更新介绍了可为 null 的类型和 null 合并运算符的概念,??在处理可以为 null 值的值时减少样本代码量。 C#6将继续此主题,其中包含 “null 条件运算符”?.。 当在表达式的右侧的对象上使用时,如果对象不 null,则为 null 条件运算符将返回成员值,否则 null:

var ss = new string[] { "Foo", null };
var length0 = ss [0]?.Length; // 3
var length1 = ss [1]?.Length; // null
var lengths = ss.Select (s => s?.Length ?? 0); //[3, 0]

(length0 和 length1 都推断为类型 int?)
上一示例中的最后一行显示了 ? 的 null 条件运算符与 ?? null 合并运算符的组合。 新C#的 6 null 条件运算符返回数组中第2个元素上的null,此时,空合并运算符将在中启动,并向lengths的数组提供0(当然,这是特定于问题的)。
对于许多应用程序而言,null 条件运算符应在很大程度上减少不必要的样本的空检查量。
由于歧义,对 null 条件运算符有一些限制。 你不能立即使用带括号的参数列表的 ?,因为你可能希望使用委托:

SomeDelegate?("Some Argument") // Not allowed

不过,Invoke 可用于将 ? 与自变量列表分开,并且仍是对 null检查样本块的标记改进:

public event EventHandler HandoffOccurred;
public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{
    HandoffOccurred?.Invoke (this, userActivity.UserInfo);
    return true;
}

摘自https://docs.microsoft.com/zh-cn/xamarin/cross-platform/platform/csharp-six

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值