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

C#中栈上using声明的IDisposable结构体是否按序释放?

C#中using声明结构体的RAII语义与释放顺序

是的,C#在你描述的场景下具备可靠的类RAII语义,你的代码会保证输出序列:

1
2
3
4
5

具体规则和解释如下:

  • 对于用using var声明的局部值类型结构体(未被复制到其他位置),C#语言规范明确规定:这类变量会在所在作用域结束时,按声明的逆序调用Dispose方法。
  • 对应你的代码执行流程:
    • Main方法先执行Console.WriteLine("1"),输出1
    • 调用func方法后,先实例化x4,再实例化x3
    • func内执行Console.WriteLine("2"),输出2
    • func方法的作用域结束,先释放x3(调用其Dispose方法输出3),再释放x4(调用其Dispose方法输出4)
    • 回到Main方法执行Console.WriteLine("5"),输出5

只要结构体是局部声明且未被复制(比如未作为参数传递、未赋值给其他变量),这种释放顺序就是语言层面保证的,完全符合RAII的可靠语义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:02:34