C # 4.0 autorise-t-il des arguments facultatifs out
ou ref
?
c#-4.0
optional-parameters
optional-arguments
Joe Daley
la source
la source
null
défaut ( je viens de PHP ) et en testant pournull
continuer à remplir l'argument ( pour ceux qui connaissent, pensezpreg_match()
) Quoi qu'il en soit, même si je comprends d'un point de vue technique, cela peut être actuellement impossible, et que PHP et C # sont plutôt incomparables, ce serait quand même un " bel " outil à disposition.Réponses:
Comme déjà mentionné, ce n'est tout simplement pas autorisé et je pense que c'est très logique. Cependant, pour ajouter plus de détails, voici une citation de la spécification C # 4.0 , section 21.1:
la source
Non.
Une solution de contournement consiste à surcharger une autre méthode qui n'a pas de paramètres out / ref et qui appelle simplement votre méthode actuelle.
Mise à jour: si vous avez C # 7.0 , vous pouvez simplifier:
(Merci @Oskar / @Reiner de l'avoir signalé.)
la source
return SomeMethod(out string temp)
. Voir plus ici: blogs.msdn.microsoft.com/dotnet/2016/08/24/…return SomeMethod(out _);
Non, mais une autre excellente alternative consiste à faire en sorte que la méthode utilise une classe de modèle générique pour les paramètres facultatifs comme suit:
Ensuite, vous pouvez l'utiliser comme suit:
la source
Il existe en fait un moyen de le faire qui est autorisé par C #. Cela revient au C ++, et viole plutôt la belle structure orientée objet de C #.
UTILISEZ CETTE MÉTHODE AVEC ATTENTION!
Voici la façon dont vous déclarez et écrivez votre fonction avec un paramètre facultatif:
Appelez ensuite la fonction comme ceci:
Pour que cela soit compilé, vous devrez activer le code non sécurisé dans les options du projet. C'est une solution vraiment hacky qui ne devrait généralement pas être utilisée, mais si vous avez une décision étrange, mystérieuse et mystérieuse inspirée par la gestion, vous avez VRAIMENT besoin d'un paramètre de sortie facultatif en C #, cela vous permettra de faire exactement cela.
la source
ICYMI: Inclus dans les nouvelles fonctionnalités de C # 7.0 énumérées ici , "discards" est désormais autorisé en tant que paramètres de sortie sous la forme d'un _, pour vous permettre d'ignorer les paramètres qui ne vous intéressent pas:
p.GetCoordinates(out var x, out _); // I only care about x
PS si vous êtes également confondu avec la partie "out var x", lisez également la nouvelle fonctionnalité sur "Out Variables" sur le lien.
la source
Non, mais vous pouvez utiliser un délégué (par exemple
Action
) comme alternative.Inspiré en partie par la réponse de Robin R face à une situation où je pensais que je voulais un paramètre de sortie facultatif, j'ai plutôt utilisé un
Action
délégué. J'ai emprunté son exemple de code à modifier pour l'utiliserAction<int>
afin de montrer les différences et les similitudes:Cela a l'avantage que la variable facultative apparaît dans la source comme un entier normal (le compilateur l'enveloppe dans une classe de fermeture, plutôt que nous l'enveloppons explicitement dans une classe définie par l'utilisateur).
La variable a besoin d'une initialisation explicite car le compilateur ne peut pas supposer que le
Action
sera appelé avant la fin de l'appel de fonction.Il ne convient pas à tous les cas d'utilisation, mais a bien fonctionné pour mon cas d'utilisation réel (une fonction qui fournit des données pour un test unitaire et où un nouveau test unitaire devait accéder à un état interne non présent dans la valeur de retour).
la source
Utilisez une méthode surchargée sans le paramètre out pour appeler celle avec le paramètre out pour C # 6.0 et inférieur. Je ne sais pas pourquoi un C # 7.0 pour .NET Core est même la bonne réponse pour ce fil quand il a été spécifiquement demandé si C # 4.0 peut avoir un paramètre de sortie facultatif. La réponse est non!
la source
Et comme ça?
Vous devez toujours passer une valeur au paramètre à partir de C #, mais c'est un paramètre ref facultatif.
la source
[Optional]
annotation. Cela n'aide pas.la source