J'ai ce code:
public static void Main(string[] args)
{
if (string.IsNullOrEmpty(args[0])) // Warning : Index was out of the bounds of the array
{
ComputeNoParam cptern = new ComputeNoParam();
cptern.ComputeWithoutParameters();
}
else
{
ComputeParam cpter = new ComputeParam();
foreach (string s in args){...}
}
}
A également essayé if(args.Length==0)
, mais cela ne fonctionne toujours pas.
Fondamentalement, je veux savoir si l'utilisateur a appelé le programme avec des arguments. Sinon, le programme demandera une entrée.
Comment puis-je faire ceci? Merci d'avance.
if(args.Length==0)
devrait fonctionner, args[0]
nécessite au moins un argument pour ne pas planter.
if(args == null || args.Length == 0)
{
// no arguments
}
else
{
// arguments
}
c'est un tableau et il y a deux scénarios qui pourraient avoir le sens AUCUN argument passé. En fonction de votre sémantique
args == null
ou args.Length == 0
Dans ce cas où la méthode est appelée lorsque le programme est exécuté (par exemple, ne pas appeler la méthode dans le cadre d'un test unitaire par exemple), l'argument args ne sera jamais nul (rendant le premier test redondant). Je l'ai inclus pour être complet car le la même situation peut facilement être rencontrée dans d'autres méthodes que
si vous les testez dans cet ordre, vous n'avez pas à vous soucier que les arguments soient nuls dans cette dernière expression
if(args == null || args.Length == 0){
ComputeNoParam cptern = new ComputeNoParam();
cptern.ComputeWithoutParameters();
}
else
{
ComputeParam cpter = new ComputeParam();
foreach (string s in args){...}
}
Cela devrait également fonctionner:
if (args.Length < 1)
{
//no args passed
}
Cela devrait fonctionner sur votre scénario:
if (args == null || args.Length == 0)
{
//Code when no arguments are supplied
}
else
{
//Code when arguments are supplied
}
Remarquez comment check args == null
Doit être exécuté avant args.Length == 0
Lorsque vous utilisez || ou &&. C'est ce qu'on appelle la "condition de court-circuit" où C # commencera à évaluer la première condition et si elle est vraie, ne regardera pas la deuxième condition. Dans ce scénario, C # n'évaluera la deuxième condition que si la première condition est fausse.
Supposons que si vos conditions sont alignées lorsque if(args.Length == 0 || args == null)
et args
deviennent null,
, Cela lèvera une exception sur la première condition, bien que la deuxième condition soit vraie.
C'est quelque chose que nous devons garder à l'esprit lors de la mise en place des conditions.
Une autre option disponible si vous utilisez déjà System.Linq
Consiste à utiliser l'extension Any()
, par exemple:
public static void Main(string[] args)
{
if (args == null && !args.Any())
{
// No parameters passed.
ComputeNoParam cptern = new ComputeNoParam();
cptern.ComputeWithoutParameters();
return;
}
// process parameters
ComputeParam cpter = new ComputeParam();
foreach (string s in args){...}
}
Cela pourrait aussi s'écrire:
public static void Main(string[] args)
{
if (!args?.Any() ?? true)
{
// No parameters passed.
ComputeNoParam cptern = new ComputeNoParam();
cptern.ComputeWithoutParameters();
return;
}
// process parameters
ComputeParam cpter = new ComputeParam();
foreach (string s in args){...}
}
Cela montre simplement une autre option qui s'offre à vous, je serais d'accord pour aller avec .Length
, Bien que je supprimerais la vérification nulle et utiliserais à la place un accès conditionnel.
if (args?.Length == 0) {
// Code hit if args is null or zero
}