web-dev-qa-db-fra.com

C # vérifier si vous avez passé des arguments ou non

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.

26
robertpas

if(args.Length==0) devrait fonctionner, args[0] nécessite au moins un argument pour ne pas planter.

41
Albin Sunnanbo
if(args == null || args.Length == 0)
{
    // no arguments
}
else
{
    // arguments
}
10
Tom

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){...}
}
5
Rune FS

Cela devrait également fonctionner:

if (args.Length < 1)
{
    //no args passed
}
4
Michelle

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.

1
Janaka Dissanayake

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
}
0
derpasaurus