在 using 块中使用“as IDisposable”

2023-12-29

编辑:我的问题不是关于 using 块及其工作原理。我的问题是关于两种方法的差异,如下所示。

我正在阅读 CQRS 旅程指南,但我不明白这行代码:

using (repo as IDisposable)

这意味着什么?为什么使用它作为 IDisposable?在典型的 using 块中,不需要将其用作 IDisposable:

using (var repo = this.respositoryFactory()) { // ... }

知道为什么作者用第一种方式而不是第二种方式写它吗?

这是该代码出现的方法:

private Conference.Web.Public.Models.Conference GetConference(string conferenceCode)
{
    var repo = this.repositoryFactory();
    using (repo as IDisposable)
    {
        var conference = repo.Query<Conference>()
            .First(c => c.Code == conferenceCode);
        var conferenceModel =
        new Conference.Web.Public.Models.Conference
        {
            Code = conference.Code,
            Name = conference.Name,
            Description = conference.Description
        };
        return conferenceModel;
    }
}

知道为什么作者用第一种方式而不是第二种方式写它吗?

这通常是由于对语言特征的误解造成的。您编写它的方式是用 C# 编写它的惯用方式:

using (var repo = this.respositoryFactory()) 
{

作者的方法唯一真正的优势是repositoryFactory可能会返回一个未实现的类型IDisposable。通过编写代码using (repo as IDisposable),相同的代码可以处理非一次性类型。

大多数时候,这不是问题。不过,工厂可能会可选地返回一个IDisposable类型。例如,假设此方法是在泛型类中完成的,并且repositoryFactory返回了一个IRepository<T>,类型可能会或可能不会实现IDiposable,在这种情况下,这种方法可以处理这两种情况,而无需强加IDisposable对泛型类型的约束。

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

在 using 块中使用“as IDisposable” 的相关文章

  • C++11 中具有 C 链接的复杂类型

    我需要将 C 库的标头包含到我的 C 11 代码中 现在 标头提供了涉及大量的例程和数据结构double complex到处都是 例如 include
  • 确保 unsigned int/long 始终在 C# 中的检查上下文中执行

    有没有人觉得奇怪 uint 和 ulong 的默认上下文是未检查的 而不是检查的 因为它们旨在表示永远不能为负的值 因此 如果某些代码试图违反该约束 在我看来 自然且首选的行为是抛出异常 而不是返回最大值 这很容易使重要数据处于无效状态并且
  • 如何让BackgroundWorker返回一个对象

    我需要做RunWorkerAsync 返回一个List
  • 从 C++ 中的函数返回二维数组[重复]

    这个问题在这里已经有答案了 可能的重复 C 从函数返回多维数组 https stackoverflow com questions 3716595 c returning multidimension array from function
  • 获取不带波形符的泛型类名称[重复]

    这个问题在这里已经有答案了 我正在尝试获取类型名称T使用这个 typeof T Name 班级名称是ConfigSettings 而不是返回ConfigSettings它正在返回ConfigSettings 1 有什么具体原因吗 我怎样才能
  • 如何修复 TcpClient Ip 标头错误校验和

    我正在使用 System Net Sockets TcpClient 类 但每当我通过网络发送自定义数据包时 我都会在wireshark捕获上看到错误的校验和 我该如何修复它 问题是您在网络接口上设置了校验和卸载 这会导致您的网卡计算校验和
  • 如何获取 PropertyGrid 的单元格值 (c#)?

    如何在 C 中获取属性网格项和项的值 例如 Name Ali LastName Ahmadi Name 和 LastName 是 propertygrid 的 2 个属性 PropertyGrid只是对象的组件模型表示的视图 我会说 查看组
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • gcc 删除内联汇编代码

    看起来 gcc 4 6 2 删除了它认为函数中未使用的代码 test c int main void goto exit handler asm volatile jmp 0x0 exit return 0 拆解main 0x0804840
  • 获取进程的所有 DLL

    我想获取为给定进程加载的所有 dll 的列表 我目前正在使用 NET框架4 0 我知道有一个bug https connect microsoft com VisualStudio feedback details 546430 syste
  • 关于 FirstOrDefault 或 SingleOrDefault

    FirstOrDefault 或 SingleOrDefault 将返回什么类型的数据 假设我的查询返回 3 条记录 例如 empid ename salary 1 joy 1500 2 rob 4500 3 jen 6500 所以如果我们
  • 如何使用 Linq to Sql 修剪值?

    在数据库中 我有一个名为 联系人 的表 名字和其他此类字符串字段设计为使用 Char 数据类型 不是我的数据库设计 我的对象 Contact 映射到属性中的字符串类型 如果我想做一个简单的测试 通过 id 检索 Contact 对象 我会这
  • 在unity3D中显示数学方程

    我想使用它的 GUI 系统统一显示数学方程 有办法吗 我正在使用 C 语言在 Unity 中进行编程 如果我还可以使用 C 代码显示数学符号 这对我来说会很有用 谢谢 自 2016 年起 您可以使用TEXDraw https assetst
  • 获取RFC返回的嵌套结构的值?

    我是 C 新手 我有 rfc 它以嵌套结构的形式从 SAP 系统返回数据 但是当我使用以下方式获取该数据时 IrfcTable table rfc getTable exporting parameter et customer 它仅返回第
  • OpenMP 和 C++:this 指针

    Is thisOpenMP 中始终共享指针 尽管编译器不会抱怨以下代码default none pragma omp parallel for default none shared n for SInt i 0 i lt n i f i
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • 比较 C# 中的对象属性[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • 我可以创建一个 List> 吗?

    我正在尝试创建一个列表WeakReference使用 4 5 泛型实现 这样我就可以避免类型检查和转换WeakReference目标 但 WeakReference
  • 如何在 C# 中将 json 转换为平面结构

    我正在尝试用 C 编写函数 将 JSON 转换为键 值对 它应该支持数组 例如下面的 JSON title title value components component id id1 menu title menu title1 tit

随机推荐

  • Firebase 托管应用引擎 URL 的 Access-Control-Allow-Origin

    我在 Firebase 托管上托管一个单页应用程序 我需要允许对应用程序引擎的跨域请求 应用程序托管在project id firebaseapp com 上 应用程序引擎服务托管在project id appspot com 上 我把部署
  • 如何用RadWindow替换警报消息框

    My Code
  • 在 Obj-C 中获取 AppleScript 返回值

    我在 Obj C cocoa 项目中使用一些 AppleScript 来控制 QuickTime 播放器 播放 暂停 停止 快进和快退等 取得了巨大成功 尽管我对 AppleScript 的了解非常有限 然而 我最想要的是电影的 当前时间
  • R:在循环内定义函数

    在循环中定义多个函数 par lt 1 2 parameters for functions qF lt list list I will write the functions into for i in 1 2 qF i lt func
  • 使用 CSS 将顶部和底部边框添加到一组选定元素

    所以我有一个搜索结果网格 这些结果是可选择的 当它们被选择时 我添加class selected 给他们 可以有多组结果 通过命令 按住 Ctrl 键单击行来完成 我所说的结果组是指选择的连续元素 我想要做的是 仅向任何给定的选定结果组的第
  • 获取所有登录用户

    我想有自己的聊天 我无法使用聊天模块 因为我必须对其进行个性化 我必须检索所有在线用户 但我看不到任何变量 我只能获取当前登录用户的名称 而无法获取其余登录用户的名称 您可以通过查询会话表来获取所有登录用户的列表 我假设您使用的是 Drup
  • 在 ASP.net Core Web Api 中动态选择身份验证方案

    我正在将使用 OWIN 和 NET Framework 构建的自托管 Web API 移植到 ASP NET Core Web API 使用 NET 6 0 在原始 API 中 我有一个自定义身份验证机制 可以根据请求中的标头动态为每个调用
  • MailChimp API 成员信息问题

    我需要通过 api 检索所有用户信息 在我发现的文档中查找它 http apidocs mailchimp com api 2 0 lists member info php http apidocs mailchimp com api 2
  • 无法安装包车

    我在 Linux mint 17 3 64 位中使用 R 版本 3 2 3 我试图安装包 car dependencies TRUE 但安装失败并出现以下错误消息 gt warnings Warning messages 1 In inst
  • 通过 VBA 使用 SFTP 下载文件

    我的目标是从 SFTP 服务器下载文件 而不是上传文件 并且我正在尝试调整本网站上另一个问题的代码来执行此操作 为了方便起见 我粘贴了下面的代码 我从 Putty 下载了 PSFTP 当我尝试使用以下命令行进行连接时 PSFTP 关闭 op
  • PHP 比较和更改多维数组中的某些元素

    简而言之 我有两个简单的数组 我想验证第二个数组中的某些键是否具有空值 并将它们替换为第一个数组中的对应值 Example a1 1 gt one 2 gt two 3 gt three 5 gt cinco 6 gt six a2 2 g
  • 数据绑定如何工作?

    我现在正在尝试将数据添加到列表框中 如果您查看我的 XAML 这是我构建的列表框
  • 无法访问 Chrome 中另一个框架的内容

    我有两个框架 两个框架中的页面都来自同一域 本地主机或活动域 都使用相同的协议 当第二个框架 xsample 完全加载并且任何 onload JS 函数完成时 第一个框架需要访问第二个框架 xsample 的元素 但第二帧需要一段时间才能加
  • 在 codeigniter 中创建父树及其子树

    我正在 codeigniter 中工作 我想在父代理下显示父代理及其子代理 我的父代理数据显示如下 Array 0 gt stdClass Object id gt 1 Introducer code gt 0 Designation gt
  • PHP 速记加法运算符 - 未定义的偏移量

    我使用 PHP 速记加法运算符来统计多维数组中特定 id 出现的次数 source tally array foreach items as item source tally item gt getId 1 第一次遇到新 id 时 它将其
  • 是否有可能始终消除 goto?

    在做好一切的同时withgoto 很容易 由 f ex IL 证明 我想知道是否也可以消除all具有更高级别表达式和语句的 goto 语句 例如 使用 Java 支持的所有内容 或者 如果您愿意 我正在寻找的是始终有效的 重写规则 无论 g
  • 如何让 ng-repeat 过滤掉重复的结果

    我正在运行一个简单的ng repeat通过 JSON 文件并想要获取类别名称 大约有 100 个对象 每个对象属于一个类别 但只有大约 6 个类别 我当前的代码是这样的
  • 在开发和生产环境中使用不同的Web.config

    我需要在 ASP NET 应用程序中使用不同的数据库连接字符串和 SMTP 服务器地址 具体取决于它的运行位置 开发环境或生产环境 应用程序通过以下方式从 Web config 文件读取设置WebConfigurationManager A
  • 如何在java中使用web服务时触发处理程序类

    Using Axis 1 4我构建了将使用外部服务器服务的客户端应用程序 服务器应用程序使用包含标头标记和正文标记的肥皂消息进行响应 我的标题标签问题 我试图找到方法来获取header元素 到目前为止做了什么 我发现我需要使用一个扩展的处理
  • 在 using 块中使用“as IDisposable”

    编辑 我的问题不是关于 using 块及其工作原理 我的问题是关于两种方法的差异 如下所示 我正在阅读 CQRS 旅程指南 但我不明白这行代码 using repo as IDisposable 这意味着什么 为什么使用它作为 IDispo