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
相关产品推荐
相关产品推荐

