C# using 语句

2024-02-25

我真的很想把这件事从我的脑海里赶出去。请看下面的代码:

using (DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString, "SELECT * FROM MyDBTable")) {
    List<string> resultsList = new List<string>();
    foreach (DataRow dataRow in resultTable.Rows) {
        resultsList.Add(dataRow[0].ToString());
    }
    return resultsList;
}

数据表是否已处理?有人可以解释一下这是如何转换为 try/catch/finally 块的吗? MSDN 指出,如果发生异常,Dispose 方法仍然会被调用,但是 return 语句呢?

或者我应该使用下面的代码:

List<string> resultsList = new List<string>();
using (DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString, "SELECT * FROM MyDBTable")) {
    foreach (DataRow dataRow in resultTable.Rows) {
        resultsList.Add(dataRow[0].ToString());
    }
}
return resultsList;

也许应该使用第二个,但我只需要启发:)。请解释。谢谢。


using语句只是语法糖,它被翻译成 try/finally 块。从您的代码开始,C# 编译器将如何翻译using块进入 try/finally 块。

        try
        {
            DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString, "SELECT * FROM MyDBTable");
            List<string> resultsList = new List<string>();
            foreach (DataRow dataRow in resultTable.Rows)
            {
                resultsList.Add(dataRow[0].ToString());
            }
            return resultsList; 
        }
        finally
        {
            resultTable.Dispose();
        }

从代码中可以看出,无论 return 语句如何,resultTable 都会被释放。 using 块仅确保对象在作用域之后被释放。

您的第一个代码对我来说看起来不错,不需要更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# using 语句 的相关文章

随机推荐

  • 如何通过解耦的后端和前端进行社交身份验证(Passport / Express / React)

    我正在尝试使用 PassportJS Express 后端和 React JS 前端来进行社交身份验证 但是 我不确定如何去做 我做了一些阅读并实现了社交身份验证 当使用 Google Auth 登录时 它会返回由 Express 应用程序
  • 是否建议在 bash 脚本中捕获 SIGPIPE?

    我在使用系统调用命令从 C 执行 bash 脚本时遇到问题 该脚本捕获了一个SIGPIPE发出信号并退出并返回代码141 这个问题只在我的代码的最后一个版本中开始出现 我的问题如下 为什么这个 SIGPIPE 现在出现而以前没有出现 忽略
  • 带脚本的文本编辑器...适用于 Linux

    一段时间以来 我一直在我的 Windows 机器上使用 UltraEdit 事实证明 使用熟悉的语言 JavaScript 编写脚本的能力非常有用 唯一的问题是我无法在工作时在我的 Linux 机器上使用它 是否有在 Linux 上运行并具
  • 如何“解码”UTF-8 字符?

    假设我想编写一个函数来比较两个 Unicode 字符 我该怎么做呢 我读了一些文章 比如this http en wikipedia org wiki UTF 8 但还是没明白 让我们来 作为输入 已经在范围内了0x0800 and 0xF
  • WIA服务2、在windows xp/7上下载并安装

    我编写了一个从扫描仪扫描图像的应用程序 这在我的开发机器 win7 Ultimate sp1 64位 上运行良好 我尝试在 Windows XP 计算机 或 Windows Server 2008 标准 上运行该应用程序 但失败并出现此错误
  • Android IllegalArgumentException:如果应用程序在后台运行一段时间,则状态类错误

    如果我设置应用程序背景 我认为这是由于内存不足造成的 日志如下 java lang RuntimeException Unable to start activity ComponentInfo com qingdaonews bus co
  • 标头包含深度限制[重复]

    这个问题在这里已经有答案了 我想知道 包含头文件时 包含文件的深度可以无限增加吗 你能在编译时指定一个限制吗 Example main c include A h const int xyz CONST VALUE A h include
  • MapView 没有从 ViewPager 中删除?

    在我的应用程序中 我试图在 ViewPager 内实现地图视图 我的应用程序中有 4 个不同的页面 MapView在第四页 我确实成功加载了地图 但是当我滑回第一页时 必须使用 destroyItem 方法销毁第四个视图 如果我刷到第四页
  • 如何在云监控/stackdriver中按状态显示总dataproc作业?

    Dataproc 作业中应该有成功 失败 待处理状态 当然我可以在 Cloud Console 上 Dataproc 下的作业部分中看到该状态 但是 如何在云监控 stackdriver 中可视化所有这些状态 已经尝试过记分卡图表并使用指标
  • 是否可以从包含操作系统的 .img 文件创建 docker 映像

    是否可以转换 img包含操作系统 Arch Linux 的文件到 Docker 镜像中 更准确地说我想要码头化RuneAudio Raspberry Pi 图像 从完整的操作系统映像生成 Docker 映像通常是一个次优的过程 操作系统映像
  • HTML 注释行为

    所以 我在 Magento WYSIWYG 编辑器 所有东西 中闲逛时注意到呈现为在生成的 HTML 中 似乎也将任何字符串括在呈现正常的评论 我只在 Chrome 中测试过这一点 但这种行为对我来说似乎有点奇怪 我看过W3C 规范评论 h
  • 文本词云绘制错误

    我有以下用于绘制词云的代码 并且收到后续错误 wordcloud dm word dm freq scale c 8 2 min freq 2 max words Inf random order FALSE rot per 15 colo
  • 在 Windows 上为 python 2.7 安装 gstreamer 1.0。

    我一直在尝试在 Windows 上安装 gstreamer 1 0 以用作 python 2 7 模块 我从这里安装了sdkhttp docs gstreamer com display GstSDK Installing on Windo
  • Tensorflow 错误“形状 Tensorshape() 必须具有等级 1”

    import tensorflow as tf import numpy as np import os from PIL import Image cur dir os getcwd def modify image image resi
  • 如何在 C# 中打印 PCL 文件?

    我有一个使用 打印到文件 生成的 PCL 文件 在 C 中以编程方式打印此文件的最佳方法是什么 当然 考虑到我要打印的打印机支持 PCL 我知道我可以通过从提示中调用来进行打印 copy filename pcl location prin
  • iOS App Store 提交:缺少图标 (Cordova)

    我正在制作 Cordova PhoneGap 应用程序并将其提交到 App Store 但是 我收到了一封电子邮件 其中包含以下消息 Invalid Icon Path No icon found at the path reference
  • SQL Server存储过程参数输出

    我有一个存储过程 为了这个问题的目的 我已经大大缩小了它的规模 但本质上我需要帮助的问题是这个 如果表中的一行xyz已更新 我需要将 ID 相互附加并输出回调用应用程序 更新按预期工作 问题在于我构建输出的方式 IPV ID Found 请
  • 在第三方 Django 应用程序中自定义模板

    我在 Django 项目中使用第三方应用程序 django social share 但我需要自定义模板 我不知道如何去做 我尝试的一切都继续使用默认模板 当前默认模板存储在 django social share django socia
  • 我在我的项目中添加 MPAndroidChart 但在我的 xml 中找不到 LineChart

    我想在我的项目中使用 MPAndroidChart 我在我的 gradle 中添加了该库 但在我的 xml 布局文件中 我找不到 Chart 我的 build gradle Module 是这样的 dependencies implemen
  • C# using 语句

    我真的很想把这件事从我的脑海里赶出去 请看下面的代码 using DataTable resultTable DBUtility GetSingleDBTableResult connectionString SELECT FROM MyD