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

代码:

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

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

UpdateDefaultIndicator(newViewID, out (Queue<SqlCommand>)insertScriptQueue);
有帮助吗?

解决方案

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

其他提示

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

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

正如Ed在评论中指出的,<!> quot; modify <!> quot;可能没有完全了解这里发生了什么 - 根据定义,引用类型的out参数将是函数调用结束时的初始化对象。正如大多数其他答案所指出的,如果你想传入一个初始化的对象,那么ref是更强的选择。

Queue<SqlCommand> insertScriptQueue;

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

UpdateDefaultIndicator(newViewID,out insertScriptQueue);

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

为什么要<!>引用; out <!>引用; ......这里......为什么不返回类型呢?让方法返回队列<!> lt; <!> gt;而不是无效......会对你有用吗?

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top