out函数参数的Tricky C#语法

时间:2009-10-22 21:35:37

标签: c# asp.net syntax queue

我熟悉使用out传递一个简单的数据类型进行操作,但我似乎无法弄清楚如何在不导致编译错误的情况下传入此Queue<>。有什么想法吗?

代码:

Queue<SqlCommand> insertScriptQueue = new Queue<SqlCommand>();

private void UpdateDefaultIndicator(int newDefaultViewID,
                                    out (Queue<SqlCommand>) insertScriptQueue)

UpdateDefaultIndicator(newViewID, out (Queue<SqlCommand>)insertScriptQueue);

7 个答案:

答案 0 :(得分:5)

您正在传递参考类型。无需用完。

答案 1 :(得分:4)

您不应该初始化out变量。如果需要修改范围内变量,请改用ref。

正如Ed在他的评论中指出的那样,“修改”可能无法让你完全了解这里发生了什么 - 根据定义,参考类型的out参数将是函数调用结束时的初始化对象。正如大多数其他答案所指出的,如果你想传入一个初始化的对象,那么ref是更强的选择。

答案 2 :(得分:3)

Queue<SqlCommand> insertScriptQueue;

private void UpdateDefaultIndicator(int newDefaultViewID,
                                out Queue<SqlCommand> insertScriptQueue){/*body*/}

UpdateDefaultIndicator(newViewID,out insertScriptQueue);

这对我来说很好......你得到了什么错误?

答案 3 :(得分:3)

为什么你想要一个“出局”...这里......为什么不返回这个类型呢?让方法返回队列&lt;&gt;无效的insteasd会为你工作吗?

答案 4 :(得分:2)

无论如何,Queue将通过引用传递,它不是值类型。只是不要使用'out'。更新:原谅我,我在考虑'ref' - 但是你传递Queue数据类型的事实,而不仅仅是一个未分配的引用,让我觉得你还是想要使用'ref'。当然,您不需要使用'ref',因为Queue不是值类型;默认情况下,它已经通过“引用”传递。

答案 5 :(得分:0)

确保在UpdateDefaultIndicator方法中为insertScriptQueue分配某种值

答案 6 :(得分:0)

顺便说一下,原始问题的答案是你正在向队列施放,并且演员正在返回临时引用。该引用不可分配,因此不是合法的out参数。 Erich的代码实现了解决这个问题的方法。