Comment passer des paramètres facultatifs pour une méthode en C#?
Comment passer des paramètres facultatifs pour une méthode en C# ?
Supposons que j'ai créé une méthode appelée Sendcommand
public void SendCommand(String command,string strfilename)
{
if (command == "NLST *" ) //Listing Files from Server.
{
//code
}
else if (command == "STOR " + Path.GetFileName(uploadfilename)) //Uploading file to Server
{
//code
}
else if ...
}
Maintenant, j'ai envie d'appeler cette méthode dans la méthode main comme
Sendcommand("STOR ", filename);
Sendcommand("LIST"); //In this case i dont want to pass the second parameter
Comment y parvenir?
double possible de Comment pouvez-vous utiliser l'option paramètres en C#?
Veuillez voir ma réponse: ne pas utiliser une seule méthode, utiliser une méthode par commande ou d'une commande distincte de la classe pour chaque commande
Veuillez voir ma réponse: ne pas utiliser une seule méthode, utiliser une méthode par commande ou d'une commande distincte de la classe pour chaque commande
OriginalL'auteur Swapnil Gupta | 2010-07-29
Vous devez vous connecter pour publier un commentaire.
Utiliser les paramètres d'attribut:
ensuite, vous pouvez l'appeler comme ceci:
ou si vous utilisez C# 4.0, vous pouvez utiliser la nouvelle option arguments de la fonction:
Notez également que dans le cas où vous avez plusieurs arguments optionnels, vous pouvez utiliser une virgule pour désigner le paramètre facultatif vous faites référence. Ex.: SendCommand("cmd", strfilename:"abc" );
OriginalL'auteur codymanix
Pré .NET 4, vous devez surcharger la méthode:
.NET 4 prend en charge les paramètres par défaut, vous permettant de faire tout cela en une seule ligne.
Par ailleurs, dans la question que vous avez écrit vous n'êtes pas à l'appel de la méthode dans votre premier exemple:
est encore à l'aide d'un seul paramètre qui est la concaténation des deux chaînes.
Désolé, c'est la virgule Sendcommand("STOR ", filename);
OriginalL'auteur Martin Harris
La réponse la plus évidente pour ce qui devrait être, ne pas faire de cette façon.
Vous devez avoir une méthode distincte pour chaque commande ou une commande de la classe de base et une autre classe dérivée pour chaque commande, avec une méthode Execute.
C'est mauvais design afin d'avoir une méthode qui gère tous les moyens imaginables de commande.
Vous ne voulez vraiment pas un
Sendcommand()
de traiter chaque commande possibles.Oui. Il serait préférable d'avoir 100 classes en fait un fichier avec 100 méthodes est de trop. Ces deux options sont cent fois mieux qu'une méthode qui gère l'exécution de 100 commandes! Pouvez-vous imaginer combien de temps cette méthode, comment dur il serait pour déboguer, comment de nombreux paramètres facultatifs il aurait du avoir: probablement en retrait, il sera difficile de voir qui { ou } est qui. Vous avez certainement, certainement, certainement ne voulez pas qu'une méthode pour traiter toutes les commandes. Un par commande ou une classe par commande.
OriginalL'auteur Kieren Johnstone
Vérifier C# 4.0 Paramètres Optionnels.
Assurez-vous également que vous utilisez .NET 4.
Si vous avez besoin d'utiliser des versions plus anciennes de .NET.
Surcharge de la méthode est la solution :
Merci, corrigé.
OriginalL'auteur Incognito
Gens,
J'ai été à la recherche à ce fil, en essayant de résoudre un problème qui n'existe pas réellement, parce que le C# "juste passe par" un tableau params! Que je ne connaissais pas jusqu'à ce que je l'ai juste essayé.
Voici un SSCCE:
Produit:
Doux!
Mais pourquoi? ... Eh bien parce que (bien sûr) le plus proche de paramètre-match pour le très-surcharge de la Console.Méthode WriteLine est
(string format, params object[] arg)
... pas(string format, object arg)
que je pensais.Je sorte savais que cela devait être possible, en quelque sorte, parce que (je suppose) de la Console.WriteLine t-il, je viens en quelque sorte, il devrait être DUR... et donc à penser que la simplicité et la "gentillesse" de ce truc-de-la-langue est digne de mention.
Acclamations. Keith.
PS: je me demande si VB.NET se comporte de la même manière? Je suppose qu'il doit.
OriginalL'auteur corlettk
Il y a trois solutions faciles à celui-ci:
OriginalL'auteur Flynn1179
Créer une autre méthode qui appelle le premier?
OriginalL'auteur Arcturus
Surcharge de la fonction. plutôt que de vérifier pour la branche conditionnelle. Quelque chose comme ceci:
OriginalL'auteur loxxy
Vous pouvez le faire de plusieurs façons. Si vous êtes en utilisant .NET 4.0, vous pouvez utiliser les paramètres facultatifs sur la méthode:
Sinon, vous pouvez simplement créer une autre méthode qui appelle la méthode que vous avez déjà, mais en passant les paramètres par défaut que vous voulez être en option:
OriginalL'auteur Jonathon Bolster
Facultatif fonction de paramètres entrent en c# 4.0 ici est le lien. Sinon, il faut écrire une fonction surchargée.
OriginalL'auteur Siddiqui
Toutes les réponses sur cette page sont valables façons d'accepter des paramètres facultatifs, mais dans de nombreux cas, ce est un signe que votre méthode est d'essayer d'en faire trop.
Dans de nombreux cas, vous pourriez être mieux avec la suite sans ambiguïté des méthodes...
OriginalL'auteur Fenton
Vous pouvez utiliser le mot clé params :
et vous pouvez l'utiliser comme :
OriginalL'auteur Florian