我有一个方法有几个“输出”参数。它们不存在,因为应该在函数内部为它们设置值。但在某些情况下,编译器不够聪明,它看不到任何执行路径中设置的参数值。这就是为什么我必须在方法开始时为 out 参数设置默认值。但是由于此方法是具有多个实现的接口(interface)的一部分,因此此初始化代码是重复的。我不喜欢它。
您认为解决这个问题有哪些选择?我看到的一种选择是使用 ref 而不是 out。它在概念上是不正确的,因为它不保证参数值将在方法内设置。但实际上它是一样的(因为我在函数的开头设置了默认值,这意味着在这种情况下 out 不能保证在方法内部设置真实值)。
还有其他选择吗?
最佳答案
就个人而言,我尽量避免制作具有“多个”ref
或 out
参数的方法。
一旦您创建了一个方法,该方法具有多个 ref
或 out
参数,就我个人而言,我觉得是时候考虑重构以使其返回自定义包含所有数据的类型(class
或 struct
取决于上下文)。这有很多优点,特别是因为它允许该类型在类型的构造中处理自己的正确性验证。
如果您有“多个实现”,则尤其如此 - 因为这会显着降低出错的可能性并消除大部分重复代码(因为它可以进入新类型)。
关于C# ref/out 参数与惰性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5081503/