如何用C#7模式匹配简化可枚举对象首个实例的非空判断操作?
使用C#7模式匹配简化可枚举对象首个实例的访问流程
当然可以!C# 7引入的模式匹配正好能帮你把FirstOrDefault调用和null判断合并成更简洁的写法,让代码更紧凑易读。
原来的代码
IEnumerable<Client> clients; // = new List<Client> {new Client()}; Client myClient = clients.FirstOrDefault(); if (myClient != null) { // do something with myClient }
C#7简化后的写法
你可以直接把FirstOrDefault的调用结果放到if条件里,结合is模式匹配完成赋值和非null判断:
IEnumerable<Client> clients; // = new List<Client> {new Client()}; if (clients.FirstOrDefault() is Client myClient) { // do something with myClient }
语法解释
这里用到了C#7的类型模式匹配:
clients.FirstOrDefault()会返回序列中的第一个Client实例,或者null(因为Client是引用类型)is Client myClient会同时完成两个操作:检查返回值是否为非null的Client类型,并且将这个实例赋值给myClient变量myClient变量的作用域被限制在if代码块内,符合最小作用域原则,避免了不必要的变量暴露
额外补充(C#8+扩展)
如果你的项目使用C#8或更高版本,还可以用更简洁的弃元模式省略类型声明(编译器会自动推断类型):
if (clients.FirstOrDefault() is {} myClient) { // do something with myClient }
这种写法同样能达到目的,代码会更短一些。
内容的提问来源于stack exchange,提问作者KyleMit
相关产品推荐
相关产品推荐

