2015-07-20 1 views
1

Ce code est-il sûr et fera-t-il ce que j'attends? Y a-t-il des pièges? Est-il nécessaire que GenerateValue utilise un paramètre ref, ou est-ce que la méthode qui prend cet argument par valeur fonctionne aussi?Pouvez-vous utiliser la variable d'un paramètre out comme argument suivant d'une autre fonction dans la même expression que l'appel qui définit le paramètre out?

int value; 
UseValue(GenerateValue(out value), ref value); 

définition de la méthode ne devrait pas affecter la réponse, mais voici un exemple de définition:

private bool GenerateValue(out int value) 
    { 
     bool success = true; 
     value = 42; 
     return success; 
    } 

    private void UseValue(bool success, ref int value) 
    { 
     if (success) 
     { 
      System.Diagnostics.Debug.WriteLine(value); 
     } 
    } 
+0

Il n'est pas nécessaire d'avoir 'ref' dans' UseValue'. – sstan

Répondre

4

Le code est sûr. Fondamentalement, il est équivalent de

int value; 
bool res = GenerateValue(out value); 
UseValue(res, ref value); 

S'il vous plaît noter que @sstan a commenté que ref est pas vraiment nécessaire dans notre cas. Mais même si cela était nécessaire en raison du changement de value à l'intérieur de Usevalue, le code reste toujours OK.

1

UseValue(GenerateValue(out value), value);

il est aussi très bien. pense que c'est un appel séquentiel.