try...catch 中的隐式类型变量

2024-04-23

我喜欢对几乎所有事情使用隐式类型,因为它干净而简单。但是,当我需要在单个语句周围包装 try...catch 块时,我必须打破隐式类型以确保变量具有定义的值。这是一个人为的假设示例:

var s = "abc";

// I want to avoid explicit typing here
IQueryable<ABC> result = null;
try {
    result = GetData();
} catch (Exception ex) { }

if (result != null)
    return result.Single().MyProperty;
else
    return 0;

有什么办法可以打电话吗GetData()具有异常处理,但无需显式定义结果变量的类型?就像是GetData().NullOnException()?


这是一个常见问题。我建议您坚持使用现有的解决方案。

如果你真的想要一个替代方案,这里是:

static T NullOnException<T>(Func<T> producer) where T : class {
  try { return producer(); } catch { return null; } //please modify the catch!
}

//now call it
var result = NullOnException(() => GetData());

请修改此设置以记录异常或将捕获限制为具体类型。我不赞成吞并所有例外。

由于这个答案被大量阅读,我想指出这个实现只是演示质量。在生产代码中你可能应该纳入评论中给出的建议。为自己编写一个强大的、设计良好的辅助函数,它将为您服务多年。

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

try...catch 中的隐式类型变量 的相关文章

  • C++:初始化结构体并设置函数指针

    我正在尝试使用函数指针初始化结构 但是除非使用全局函数完成 否则我很难这样做 以下代码有效 float tester float v return 2 0f v struct MyClass Example typedef float My
  • 如何利用磁盘 IO 队列

    我需要从 3 7 GB 文件中读取小数据序列 我需要阅读的职位是不相邻 但我可以命令 IO 以便从头到尾读取文件 该文件存储在 iSCSI SAN 上 该 SAN 应该能够处理 优化排队 IO 问题是 如何一次性请求我需要的所有数据 位置
  • ToLookup 是否强制立即执行序列

    我正在调查可枚举 ToLookup将可枚举序列转换为字典类型数据结构的 API 更多详情可在这找到 https msdn microsoft com en us library system linq enumerable tolookup
  • 删除 QComboBox“下拉”动画

    我正在使用 Qt 4 8 并且想在单击 QComboBox 时摆脱 下拉 动画 我也想稍微移动一下 到目前为止 我一直在考虑重新实现 showPopup 和 hidePopup 但不知道如何使其工作 此外 每次我尝试使用 CSS 进行移动或
  • 尝试使用指向 ODBC DSN 的连接字符串时出现关键字不支持异常

    我为我的 Asp Net MVC 应用程序的数据库访问创建了一个 ODBC DSN 主要原因之一是它可以轻松地将数据库凭据 例如服务器地址 端口 用户名和密码 置于源代码控制之外 而不会妨碍我的发布能力 所以我将连接更改为DSN MyDSN
  • 将密码存储到sql中的最佳方法

    在我当前的 C Windows 应用程序中 密码已以纯文本形式存储 这显然不好 所以我只想知道加密密码并存储到 SQL Server 中的最佳方法是什么 我读到使用哈希 盐更好 但我觉得sql 2005中的 EncryptByPassPhr
  • 有没有办法找到哪些 .NET 类实现了某个接口?

    例如 如果我想查看我的 NET 选项用于实现 IList 或 IDictionary 有没有办法找到它 例如在 MSDN 文档中 我认为可以使用反射器 http www red gate com products reflector
  • 从 C++ 中的 std::string 获取字节

    我正在一个 C 非托管项目中工作 我需要知道如何获取像 一些要加密的数据 这样的字符串并获取一个 byte 数组 我将用它作为加密的源 在 C 中我做 for int i 0 i lt text Length i buffer i byte
  • 如何BSWAP 64位寄存器的低32位?

    我一直在寻找如何将 BSWAP 用于 64 位寄存器的低 32 位子寄存器的答案 例如 0x0123456789abcdef位于 RAX 寄存器内 我想将其更改为0x01234567efcdab89用一条指令 因为性能 所以我尝试了以下内联
  • 将 dataGridView 绑定到绑定列表并按文本框过滤行

    我正在开发一个 Winforms 应用程序 并且有一个已经绑定到 dataGridView 的对象的 BindingList 我还有一个 过滤器 文本框 如果它们与文本框文本不匹配 我想从 datagridview 行中过滤掉行 我想以某种
  • winapi 函数的函数指针 (stdcall/cdecl)

    请有人给我一些为 MS winapi 函数创建函数指针的提示吗 我试图为 DefWindowProc DefWindowProcA DefWindowProcW 创建一个指针 但出现此错误 LRESULT dwp HWND UINT WPA
  • 结构体前向声明编译失败

    我有以下代码 但编译器说 sender wrapper 未定义 即使我向前声明了它 我不能对结构进行前向声明吗 用VS2003编译 struct send wrapper struct IPSend IPSend IPSend const
  • Fluent NHibernate 一对一映射

    我很难利用 Fluent NHibernate 的 HasOne 映射 基本上 A 类在 B 类中可以有匹配的 只有一条或没有 记录 请帮助定义关系的 AMap 和 BMap 类 谢谢 public class A public virtu
  • DISM.exe 返回代码?

    我有一个程序调用 dism exe 程序 它在后台运行一些命令 现在 我只检查返回代码 0 或其他任何内容 以显示进程失败或成功 我可以用什么来交叉检查返回代码以获得准确的返回错误 DISM 参考了哪些回报 评论中提供的链接DISMAPI
  • 在函数内部使用时,c 数组大小会发生变化

    我有这段代码 include
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • ThemeInfo 属性有什么用?

    每当我创建新的 WPF 应用程序或 WPF 用户控件库时 AssemblyInfo cs文件包含以下属性 assembly ThemeInfo ResourceDictionaryLocation None where theme spec
  • 执行按钮单击时使 wpf UI 响应

    在我的 wpf c 应用程序中 当用户按下按钮时会执行一个很长的过程 当按下按钮直到执行完整的代码时 窗口将冻结 用户无法在窗口中执行任何其他任务 如何使按钮单击代码作为后台进程 以便窗口响应用户 我尝试过以下方法 但没有成功 privat
  • 指向数组的指针 int (*ptr)[]

    我想了解指向数组的指针如何工作 代码片段 include
  • 警告 C4172:返回局部变量或临时变量的地址[重复]

    这个问题在这里已经有答案了 可能的重复 指向局部变量的指针 https stackoverflow com questions 4570366 pointer to local variable 我在这个网站上阅读了很多关于同一问题的其他主

随机推荐

  • PHP 将整数转换为 hh:mm:ss

    我有一个 hh mm ss 格式的字符串 我将其转换为表示总秒数的整数 例如 01 43 03 01 3600 43 60 03 1 上面的示例生成整数值 6183 使用该值执行一些逻辑后 我需要将整数转换回严格的 hh mm ss 格式
  • ActiveAdmin:按子对象计数过滤

    在严重依赖 ActiveAdmin 的 Ruby on Rails 应用程序中 我有一个赞助商模型 它与赞助商模型关联 一sponsor可以资助很多孩子 所以一个sponsor可以有很多sponsorships 我想做的是能够在赞助商索引页
  • 无法使用 RVM、Ruby 1.9.2 和 Rails 3 运行 RubyMine 调试器

    我已经设置了全新的 Ubuntu 安装并遵循本指南 http ryanbigg com 2010 12 ubuntu ruby rvm rails and you安装 RVM Ruby 1 9 2 和 Rails 3 然后我安装了RubyM
  • ADAL.js 和 MSAL.js 有什么区别?

    我正在尝试处理使用 Microsoft Graph 的应用程序的身份验证 这两个库有什么区别 JavaScript 的 Active Directory 身份验证库 ADAL js https github com AzureAD azur
  • java中如何读取xep文件数据

    有没有办法在 pdf 完全渲染之前获取总页数并输入我们提供 xml 文件 xslt 是页面布局的样式表 我们使用 RenderX 从 xslt 进行 pdf 转换 将其转换为 xsl fo 文件 从 xsl fo 转换为 xep 文件 从
  • Foreman/Puma 未使用开发环境中指定的端口

    我在 application yml 中将端口设置为 3000 figaro 管理环境变量 rails s使用端口 3000 但当我跑步时foreman start 根据 Heroku 的推荐 我得到以下输出 14 53 23 web 1
  • 错误:找不到函数“geom_sf”

    我目前在 Windows 上运行 R 版本 3 4 2 并拥有 ggplot2 通过 tidyverse 和 sf 包版本 3 4 2 我正在尝试使用 ggplot2 sf 套件来绘制空间数据 尝试运行 geom sf 时 我收到错误 co
  • 为什么我的解密方法抛出“要解密的数据长度无效”加密异常

    这是一个非常常见的异常 但显然我找到的解决方案都没有解决我的问题 我有一个加密和一个解密方法 我加密一个字符串并将其写入文件 然后从文件中读取该字符串并解密 理论上 事实上 我得到了一个 加密异常 要解密的数据长度无效 在该过程的解密方面
  • 为什么在 Rust 中无法在不引用其中之一的情况下连接两个字符串?

    这有效 let hello Hello to string let world world let hello world hello world 但这并没有 let hello Hello to string let world worl
  • 如何在windows上安装mongoDB?

    我正在尝试测试 mongoDB 看看它是否适合我 我下载了 32 位 Windows 版本 但不知道如何继续 我通常使用 WAMP 服务在本地计算机上进行开发 我可以在 Wamp 上运行 mongoDB 吗 但是 使它在 Windows 上
  • T-SQL 去除所有非字母和非数字字符

    有没有一种更聪明的方法来删除所有特殊字符 而不是使用一系列大约 15 个嵌套替换语句 以下代码有效 但仅处理三个字符 与号 空格和句点 select CustomerID CustomerName Replace Replace Repla
  • 在 bash 中使用 ssh 内的 Expect 执行 sudo

    我想创建一个脚本来自动在多个 Linux 主机上进行安装 我使用 ssh 密钥登录到主机 在登录中我想做一个 sudo 我正在尝试使用 Expect 我在站上有它 但是我的服务器上没有运行脚本 我该怎么做 这是我的尝试 但没有运气 bin
  • 如何以编程方式将审阅者分配给 Azure DevOps Pull 请求?

    我知道如何使用 gitHttpClient 在 VSTS 中创建拉取请求 如下所示gitHttpClient CreatePullRequestAsync gitPullRequest repositoryId Result 但我不知道如何
  • Permission_required 装饰器不适合我

    我不明白为什么需要许可的装饰器不起作用 我想只允许工作人员访问视图 我努力了 permission required request user is staff login url admin def series info request
  • 使用 sql helper(Microsoft.ApplicationBlocks.Data) 时出现超时问题

    我在处理长sql查询时遇到超时问题 长查询超时的数据集是 static public DataSet Getxxxx Guid xxxx DataSet ds SqlHelper ExecuteDataset ConnectionStrin
  • 一般错误:1215 无法在 Laravel 中添加外键约束

    进行迁移时我收到此错误 SQLSTATE HY000 一般错误 1215 无法添加外键约束 SQL alter tablebooks添加约束books writer id foreign外键 writer id 参考writers id 我
  • 如何以编程方式按名称获取 Angular 服务

    我有一个字符串 其中包含我需要以编程方式注入到我的控制器之一中的服务名称 function Ctrl var serviceName myService var service 我认为做类似的事情应该很容易 function Ctrl in
  • Monodroid 环境变量

    在 Android 中 Android OS Environment 提供了一组可用的环境路径 但是 当考虑到跨平台功能时 我想将图片存储在图片文件夹中 因此考虑使用 System Environment GetFolderPath 然而
  • 设计允许对单个控制器操作进行令牌身份验证

    我有一个网络应用程序 它对所有控制器使用设计数据库身份验证 但是我希望有一个控制器操作 其中身份验证也使用令牌完成 我可以为此使用设备吗 制定策略有valid 调用以确定是否应启用策略的方法 这允许您在每个控制器 操作的基础上控制可用的身份
  • try...catch 中的隐式类型变量

    我喜欢对几乎所有事情使用隐式类型 因为它干净而简单 但是 当我需要在单个语句周围包装 try catch 块时 我必须打破隐式类型以确保变量具有定义的值 这是一个人为的假设示例 var s abc I want to avoid expli