2010-07-05 17 views
4

Si j'ai une méthode qui a un paramètre params, peut-elle être passée par référence et mise à jour chaque fois qu'un rendement est appelé.Les paramètres param peuvent être utilisés pour transmettre des variables par ref via une fonction utilisant le rendement

Quelque chose comme ceci:

public static void GetRowsIter(ref params valuesToUpdate) 
{ 

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

Est-ce légal? (Je suis loin de mon compilateur ou je voudrais juste l'essayer.)

Répondre

6

n ° params crée simplement un tableau qui contient les paramètres transmis. Ce tableau, comme tous les autres, est juste une collection de variables, et il n'est pas possible de déclarer une variable ou un type de tableau ref. Pour cette raison, seuls les paramètres explicites réels peuvent être passés en tant que ref ou out. Cela étant dit, si le type est un type de référence, il affichera comme d'habitude la sémantique du type de référence, ce qui signifie que toutes les modifications apportées à l'objet seront reflétées dans tout le code ayant accès à cette référence. Seules les affectations à la variable réelle ne seraient pas reflétées.

Cependant, je ne sais pas exactement ce que votre code est destiné à faire. L'instruction yield doit être suivie par l'instruction return et une valeur ou par l'instruction break, qui termine l'itérateur.

+0

Merci pour l'info. J'essayais de coder un moyen de retourner un montant variable de valeurs via l'instruction de rendement. On dirait que ça ne va pas être possible (du moins pas de cette façon). – Vaccano

+1

@Vaccano: Vous pouvez certainement retourner un nombre variable de valeurs, mais elles ne peuvent pas être 'ref'. –