Votre suggestion de result = result
ne fonctionnera pas, car il est un paramètre out
- il est certainement pas affecté à commencer, donc vous ne pouvez pas lire sa valeur jusqu'à ce que vous avez attribué une valeur.
result = null;
est certainement la voie à suivre pour un paramètre object
out. Fondamentalement, utilisez default(T)
pour le type T
que vous avez. (L'opérateur default
est utile dans les méthodes génériques - pour le code non-générique je normalement juste utiliser null
, 0, peu importe.)
EDIT: D'après le commentaire de Boris, il peut être la peine d'examiner la différence entre un paramètre ref
et un paramètre out
:
Out pour certains paramètres
- ne pas doivent être définitivement attribué par l'appelant
- Sont traités comme "pas définitivement affectés" au début de la méthode (vous ne pouvez pas lire la valeur sans l'affecter d'abord, comme une variable locale)
- Devraient être définitivement affectés (par la méthode) avant la la méthode se termine normalement avant qu'il ne revienne; il peut lancer une exception sans attribuer une valeur au paramètre)
paramètres Ref
- Do doivent être définitivement attribué par l'appelant
- sont traités comme « définitivement attribué » au début de la méthode (de sorte que vous pouvez lire la valeur sans l'affecter en premier)
- Vous ne devez pas être affecté à dans la méthode (ie vous pouvez laisser le paramètre avec son original v aleur)
Donc, il est une procédure acceptée pour écraser toute valeur que l'out par avait en premier lieu? –
C'est plus qu'accepté: c'est obligatoire. Un paramètre de sortie * doit * être définitivement assigné avant que la méthode ne se termine normalement (c'est-à-dire retourne plutôt que lance) –
Il est impossible de faire autrement. C'est ce que 'out' signifie - la valeur du client sera (sur) écrite. L'avantage de «sortir» par rapport à «ref» est que le client n'a pas besoin de s'embêter à initialiser la variable, il peut simplement la déclarer, assuré qu'une certaine valeur «initiale» sera définie lorsqu'elle passera en position «out». – Brian