Сложный синтаксис C # для параметра out function - PullRequest
4 голосов
/ 23 октября 2009

Я знаком с использованием out для передачи простого типа данных для манипуляции, но я не могу понять, как передать это Queue<> без возникновения ошибки компиляции. Есть идеи?

Код:

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

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

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

Ответы [ 7 ]

5 голосов
/ 23 октября 2009

Вы передаете тип ссылки. Нет необходимости использовать.

4 голосов
/ 23 октября 2009

Вы не должны инициализировать переменную out. Если вам нужно изменить переменную в области видимости, используйте вместо нее ref.

Как отмечает Эд в своем комментарии, «изменение» может не дать вам полного представления о том, что здесь происходит - выходной параметр ссылочного типа по определению будет инициализированным объектом в конце вызова функции. Как указывалось в большинстве других ответов, если вы хотите передать инициализированный объект, ref является более сильным выбором.

3 голосов
/ 23 октября 2009

Почему вы хотите "out" ... здесь ... почему бы вам не вернуть тип вместо этого? Позвольте методу вернуть Queue <> insteasd of void .. это будет работать для вас?

3 голосов
/ 23 октября 2009
Queue<SqlCommand> insertScriptQueue;

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

UpdateDefaultIndicator(newViewID,out insertScriptQueue);

Это прекрасно работает для меня ... Какую ошибку вы получаете?

2 голосов
/ 23 октября 2009

В любом случае очередь будет передаваться по ссылке, а не по типу значения. Просто не используйте «из». ОБНОВЛЕНИЕ: Извините, я думал о 'ref' - но тот факт, что вы передаете тип данных Queue, а не просто нераспределенную ссылку, заставляет меня думать, что вы все равно хотите использовать 'ref'. За исключением того, что вам не нужно использовать 'ref', потому что очередь не является типом значения; по умолчанию его уже передают в «по ссылке».

0 голосов
/ 23 октября 2009

Кстати, ответ на исходный вопрос заключается в том, что вы отбрасываете в очередь, а актер возвращает промежуточную ссылку. Эта ссылка не присваивается, и поэтому не является допустимым параметром out. Код Эриха реализует решение этой проблемы.

0 голосов
/ 23 октября 2009

убедитесь, что вы присваиваете insertScriptQueue какое-то значение внутри метода UpdateDefaultIndicator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...