Можно ли использовать params для передачи переменных по ссылке через функцию с помощью yield - PullRequest
4 голосов
/ 05 июля 2010

Если у меня есть метод с параметром params, можно ли его передавать по ссылке и обновлять при каждом вызове yield.

Примерно так:

public static void GetRowsIter(ref params valuesToUpdate)
{

    foreach(row in rows)
    {
       foreach(param in valuesToUpdate
       {
          GetValueForParam(param)
       }
       yield;
    }
}

Это законно? (Я далеко от своего компилятора, или я бы просто попробовал.)

1 Ответ

6 голосов
/ 05 июля 2010

Нет. params просто создает массив, который содержит передаваемые параметры. Этот массив, как и все остальные, является просто набором переменных, и невозможно объявить переменную ref или тип массива. Из-за этого только фактические явные параметры могут быть переданы как ref или out.

При этом, если тип является ссылочным типом, то он будет демонстрировать семантику ссылочного типа как обычно, означая, что любые изменения, сделанные в объекте , будут отражены во всем коде, который имеет доступ к этой ссылке , Только присваивания фактической переменной не будут отражены.

Однако я не совсем уверен, для чего предназначен ваш код. За оператором yield должен следовать оператор return и значение или оператор break, который завершает итератор.

...