我什么时候应该使用 out 参数?

2024-01-06

我不明白何时应该使用输出参数,如果我需要返回多个类型,我个人会将结果包装在新类型中,我发现使用它比使用 out 更容易。

我见过这样的方法,

   public void Do(int arg1, int arg2, out int result)

在某些情况下这实际上是有意义的吗?

怎么样TryParse,为什么不返回一个ParseResult类型?或者在较新的框架中返回一个可以为空的类型?


当你有一个TryNNN很明显,即使函数不成功,输出参数也始终会被设置。这允许您依赖于您声明的局部变量将被设置的事实,而不必稍后在代码中针对 null 进行检查。 (下面的注释表明该参数可以设置为null,因此您可能需要验证您所调用的函数的文档,以确定是否属于这种情况。)它使代码更清晰,更易于阅读。另一种情况是当您需要根据方法的条件返回一些数据和状态时,例如:

public bool DoSomething(int arg1, out string result);

在这种情况下,返回可以指示函数是否成功并且结果存储在输出参数中。诚然,这个例子是人为的,因为你可以设计一种方法,让函数简单地返回一个string,但你明白了。

缺点是您必须声明局部变量才能使用它们:

string result;
if (DoSomething(5, out result))
    UpdateWithResult(result);

代替:

UpdateWithResult(DoSomething(5));

然而,这甚至可能不是一个缺点,这取决于您想要的设计。对于 DateTime,提供了两种方法(Parse 和 TryParse)。

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

我什么时候应该使用 out 参数? 的相关文章

随机推荐

  • PHP:open_basedir 允许的路径

    我有几个电话要打给is dir在一页上 他们一直工作没有问题 几天前 托管公司将PHP从5 2升级到5 3 从那时起 我所有的电话is dir导致以下错误 消息 Warning is dir open basedir restriction
  • OpenCV中是掩码按位与运算

    我从 python 中的 opencv 开始 我有一个关于如何应用 mask 的问题 bitwise and src1 src2 mask mask 以下哪一项描述了实现 A 全部按位 先屏蔽 src1 与掩码进行 与 运算 src2 与
  • Spring安全为所有角色名称添加了前缀“ROLE_”?

    我的网络安全配置中有以下代码 Override protected void configure HttpSecurity http throws Exception http authorizeRequests antMatchers a
  • FxCop 安装

    我正在尝试获取最新版本的 FxCop 我使用的是 Visual Studio 2010 Professional 版本 它不包含代码分析 因此我尝试使用 FxCop 进行设置 At http www microsoft com en us
  • 如何从 Python 3.10 反编译 .pyc 文件?

    我确实尝试过 uncompyle6 decompyl3 等 但它们都不适用于 3 10 现在是否有可能做到这一点 使用pycdc GitHub https github com zrax pycdc https github com zra
  • 在 Windows 上运行 MySQL 或 MariaDB 服务器的最少文件 - (便携式 MySQL/MariaDB)

    我正在寻找 MariaDB 或 MySQL 运行所需的最少文件 而无需像便携式服务器一样安装它 我更喜欢 MariaDB 而不是 MySQL 我想将它嵌入到用 Delphi 编写的软件中 我的软件将能够根据需要启动和停止服务器 我用谷歌搜索
  • Nivo 滑块:第一次显示时第一张图像缩放不成比例

    我在 div 中使用 Nivo Slider jQuery 插件 该 div 的尺寸比我正在显示的图像小 当滑块滑动到第二个图像时 图像上的图像会正确缩小 但是 当第一次显示第一个图像时 加载页面后立即 它仅在宽度上缩放 而在高度上不缩放
  • 如何重新映射 python 字典键

    我正在开发一个程序 该程序 除其他外 读取 CSV 文件 它以以下形式存储为字典数组 col1 data1a col2 data2a col1 data1b col2 data2b 对于每一行 作为其他处理的一部分 我需要将这些键重新映射到
  • 更改 UITableView 的节页眉/页脚标题而不重新加载整个表视图

    有没有办法在不调用的情况下重新加载表视图的节页眉 页脚 tableView reloadData 事实上 我想在表视图的部分页脚中显示表格视图部分中的单元格数量 表视图是可编辑的 我使用删除或插入行 insertRowsAtIndexPat
  • Android:将 PNG ByteArray 写入文件

    我已将图像文件读入 ByteArray 但如何将其写回 我的意思是将 ByteArray 保存到文件系统中的图像文件 首选 PNG 格式 我的代码从 PNG 文件到 ByteArray ByteArrayOutputStream strea
  • 使用 Quartz 跨多个无状态应用程序服务器调度单个作业

    我在负载均衡器后面有一层相同的应用程序服务器 出于操作原因 我有一个限制 即两个应用程序服务器上的应用程序配置必须相同 以便可以轻松添加和删除节点 所有应用程序服务器共享相同的数据库 应用程序服务器不会 不会集群 到目前为止 这一切都运行良
  • 在片段中初始化字体

    我有这一行 Typeface font Typeface createFromAsset getAssets fonts Delius Regular ttf but the getAssets 参数似乎带来了一些错误 它带有可怕的红线下划
  • 为什么我们要在 YARN 中配置 mapred.job.tracker?

    据我所知 YARN 被引入并取代了 JobTracker 和 TaskTracker 我看过一些Hadoop 2 6 0 2 7 0安装教程 他们正在配置mapreduce framework name作为纱线和mapred job tra
  • 在运行时调整 char[] 的大小

    我需要调整大小char array size to char array new size 在运行时 我怎样才能做到这一点 如果您正在使用std vector
  • ASP.NET MVC 3:具有继承/多态性的 DefaultModelBinder

    首先 对这篇大文章 我尝试先做一些研究 以及针对同一问题的技术组合 ASP NET MVC 3 Ninject 和 MvcContrib 表示歉意 我正在使用 ASP NET MVC 3 开发一个项目来处理一些客户订单 简而言之 我有一些继
  • 有没有办法生成 DOCX 文件的缩略图?

    我已经使用像 ASPOSE 这样的 付费 工具完成了这项工作 但我很好奇是否有任何开源工具可以做到这一点 我确信可能有工具可以做到这一点 但如果您可以将文件转换为可以轻松光栅化的格式 那么可能值得探索 例如 将工作文档转换为 pdf 然后对
  • 对从 JSON 创建的数据框应用过滤条件

    我正在处理由 JSON 创建的数据帧 然后我想在数据帧上应用过滤条件 val jsonStr metadata key 84896 value 54 key 1234 value 12 val rdd sc parallelize Seq
  • 命名空间不能直接包含成员... + 类型或命名空间定义,或文件结尾预期错误

    我正在尝试编译适用于 Windows Phone 的 Sync Framework 4 0 的示例代码 但是我在几个文件中遇到了错误 这些文件之一是 if SERVER namespace Microsoft Synchronization
  • 我如何从密钥库中获取秘密?

    我想从 Azure 密钥保管库获取机密 我找到了下面的代码并尝试了它 但我因错误而失败 private String clientId i private String secret i KeyVaultClient client new
  • 我什么时候应该使用 out 参数?

    我不明白何时应该使用输出参数 如果我需要返回多个类型 我个人会将结果包装在新类型中 我发现使用它比使用 out 更容易 我见过这样的方法 public void Do int arg1 int arg2 out int result 在某些