You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:07:38