我有一个方法,其中有几个“out”参数。它们是“out”的,因为函数内部应该将值设置给它们。但在某些情况下,编译器并不聪明,它看不到参数值在任何执行路径中都被设置。这就是为什么我不得不在方法开始时为输出参数设置默认值。但由于这个方法是接口的一部分,有几个实现,这个初始化代码是重复的。而且我不喜欢这样。
你看到了解决这个问题的哪些选项?我看到的一个选择是使用ref而不是out。从概念上讲,这并不正确,因为它不能保证参数值在方法内被设置。但实际上它是一样的(因为我在函数开头设置了默认值,这意味着在这种情况下,out不能保证真正的值在方法内被设置)。
还有其他选项吗?
你看到了解决这个问题的哪些选项?我看到的一个选择是使用ref而不是out。从概念上讲,这并不正确,因为它不能保证参数值在方法内被设置。但实际上它是一样的(因为我在函数开头设置了默认值,这意味着在这种情况下,out不能保证真正的值在方法内被设置)。
还有其他选项吗?
private void Foo(out int bar) { int[] blah = { 1 }; foreach (var item in blah) { bar = 5; } }
这段代码中,变量bar
始终会被赋值,尽管编译器没有检测出来。请注意,不要改变原来的意思。 - Adam Robinson