能否在同一条语句中结合using声明与元组解构?
C#中using声明结合元组解构的问题及解决
我尝试将自动释放资源的using声明与元组解构结合,一次性拆分返回的元组为两个独立变量,写下了这段代码:
using var (dbConnection, dbContext) = GetDbContext();
对应的方法实现如下:
public static (SqliteConnection, DbContext) GetDbContext() { // 创建并初始化dbConnection和dbContext实例 return (dbConnection, dbContext); }
但这段代码无法编译运行,试了多种变体都没成功,目前只能用这种拆分的写法:
var dbInfo = DbContextHelper.GetDbContext(); using var dbConnection = dbInfo.Item1; using var dbContext = dbInfo.Item2;
问题原因与解决办法
这种写法本身在C# 9.0及以上版本是合法的,无法运行大概率是因为你的项目C#语言版本低于9.0。
- 若能升级项目的C#版本到9.0+,只需在项目设置中调整语言版本,原写法即可正常工作,两个变量都会在作用域结束时自动释放。
- 若无法升级版本,你当前使用的拆分写法已经是最简洁的可行方案,无需额外优化。
另外,也可以通过封装一个实现IDisposable的容器类来包裹两个资源,再用using声明这个容器,但这种方式会增加代码复杂度,不如上述两种方案直接。
内容的提问来源于stack exchange,提问作者ctyar
相关产品推荐
相关产品推荐

