我熟悉使用out传递一个简单的数据类型进行操作,但我似乎无法弄清楚如何在不导致编译错误的情况下传入此Queue<>
。有什么想法吗?
代码:
Queue<SqlCommand> insertScriptQueue = new Queue<SqlCommand>();
private void UpdateDefaultIndicator(int newDefaultViewID,
out (Queue<SqlCommand>) insertScriptQueue)
UpdateDefaultIndicator(newViewID, out (Queue<SqlCommand>)insertScriptQueue);
答案 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的代码实现了解决这个问题的方法。