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

C#属性模式匹配是否会后台分配对象?性能与常规判断对比

关于C#属性模式匹配的内存分配与性能问题

首先定义的类:

public class MyData
{
   public int Count;
}

以及用于校验的方法:

public bool IsDataValid(MyData data)
{
  return data is not { Count: 10 };
}

问题

请问该属性模式匹配过程中是否会发生对象分配?上述模式匹配检查的性能是否会比data != null && data.Count != 10更差?
我查阅了微软的《Pattern Matching Overview》和《Property Pattern》文档,但未找到明确说明。

解答

  • 是否存在对象分配?
    不存在。针对引用类型的简单字段/属性访问场景,C#编译器会将data is not { Count: 10 }这类属性模式匹配直接编译为等价的空值检查+字段访问逻辑,不会生成任何临时对象或额外的内存分配操作。

  • 性能对比
    两种写法的性能完全一致。编译器会对属性模式匹配做完全优化,最终生成的IL代码和手动编写的data != null && data.Count != 10完全相同,运行时的执行效率没有任何差异。你可以通过反编译工具查看IL代码来验证这一点。

内容的提问来源于stack exchange,提问作者DachshundWithAKeyboard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:14:57