2012-08-03 13 views
14

tengo este código:C# comprueba si ha pasado o no argumentos

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

también trató if(args.Length==0), pero todavía no funciona.

Básicamente quiero averiguar si el usuario llamó al programa con argumentos. Si no es así, el programa solicitará una aportación.

¿Cómo puedo hacer esto? Gracias de antemano.

+3

¿Qué ocurre cuando intentas 'args.Length == 0'? –

+2

¿Qué no funcionó con 'args.Length == 0'? Un consejo humilde para el futuro: cuando dices "no funciona", no es suficiente explicación de un problema. Elabore, diga lo que no funciona, cómo no funciona, qué sucede en su lugar que no espera, etc. =) –

+0

Cuando usa 'if (args.Length == 0)', y doesn ' t trabajo, ¿qué hace en lugar de trabajar? – phoog

Respuesta

28

if(args.Length==0) debe funcionar, args[0] requiere al menos un argumento para no bloquearse.

8
if(args == null || args.Length == 0) 
{ 
    // no arguments 
} 
else 
{ 
    // arguments 
} 
4

es una matriz y hay dos escenarios que pueden tener el significado de que NO pasaron los argumentos. Dependiendo de sus semántica

args == null o args.Length == 0

En este caso en el que se llama al método cuando se ejecuta el programa (por ejemplo, no llamar al método como parte de, digamos, una prueba de unidad) el argumento args nunca será nula (haciendo que la primera prueba sea redundante) La he incluido para completarla porque la misma situación podría encontrarse fácilmente en otros métodos que el

, si los prueba en ese orden no tiene que preocuparse porque args sea nulo en el última expresión

if(args == null || args.Length == 0){ 
    ComputeNoParam cptern = new ComputeNoParam(); 
    cptern.ComputeWithoutParameters(); 
} 
else 
{ 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 
+0

Utilice ".Length" .. cuidado con la letra mayúscula, no ".length" – levteck

4

Esto también debería funcionar:

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

Otra opción disponible si ya está usando System.Linq es hacer uso de la extensión Any(), por ejemplo:

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

Esto también se podría escribir:

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

Esto simplemente muestra otra opción disponible para usted, estoy de acuerdo con ir g con .Length, aunque dejaría caer la verificación nula y usaría el acceso condicional en su lugar, entonces.

if (args?.Length == 0) { 
    // Code hit if args is null or zero 
} 
Cuestiones relacionadas