C# ref/out 参数与惰性

标签 c# .net

我有一个方法有几个“输出”参数。它们不存在,因为应该在函数内部为它们设置值。但在某些情况下,编译器不够聪明,它看不到任何执行路径中设置的参数值。这就是为什么我必须在方法开始时为 out 参数设置默认值。但是由于此方法是具有多个实现的接口(interface)的一部分,因此此初始化代码是重复的。我不喜欢它。

您认为解决这个问题有哪些选择?我看到的一种选择是使用 ref 而不是 out。它在概念上是不正确的,因为它不保证参数值将在方法内设置。但实际上它是一样的(因为我在函数的开头设置了默认值,这意味着在这种情况下 out 不能保证在方法内部设置真实值)。

还有其他选择吗?

最佳答案

就个人而言,我尽量避免制作具有“多个”refout 参数的方法。

一旦您创建了一个方法,该方法具有多个 refout 参数,就我个人而言,我觉得是时候考虑重构以使其返回自定义包含所有数据的类型(classstruct 取决于上下文)。这有很多优点,特别是因为它允许该类型在类型的构造中处理自己的正确性验证。

如果您有“多个实现”,则尤其如此 - 因为这会显着降低出错的可能性并消除大部分重复代码(因为它可以进入新类型)。

关于C# ref/out 参数与惰性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5081503/

相关文章:

c# - 判断对象是否为任意类型的数组,并获取数组长度

c# - 在作为数组的 ICollection 上调用 .toArray() 是否返回引用或副本?

c# - ASP.net Core中host和server的区别和联系

c# - IEnumerable 是否必须使用 Yield 才能延迟

c# - 如何正确设置模型、POCO 类?

c# - 如何创建 .aspx 页面列表?

.net - 如何使用附件和链接资源指定内容类型名称和内容配置文件名?

.net - 何时抛出异常以及何时记录异常?

c# - 在哪里可以找到所有可用 ChromeOption 参数的列表?

C#暂停程序执行