Introducción a C#
Por Nacho Cabanes, versión 0.93 de 16-abr-2010


(Nota: Estás viendo una versión del curso antigua, creada en 2009. Es recomendable que sigas la versión 2015, mucho más actualizada, con contenidos más detallados, más ejemplos y más ejercicios propuestos)

5.11. Parámetros y valor de retorno de "Main"

Es muy frecuente que un programa que usamos desde la "línea de comandos" tenga ciertas opciones que le indicamos como argumentos. Por ejemplo, bajo Linux o cualquier otro sistema operativo de la familia Unix, podemos ver la lista detallada de ficheros que terminan en .c haciendo

 ls –l *.c

En este caso, la orden sería "ls", y las dos opciones (argumentos o parámetros) que le indicamos son "-l" y "*.c".

La orden equivalente en MsDos y en el intérprete de comandos de Windows sería

 dir *.c

Ahora la orden sería "dir", y el parámetro es "*.c".

Pues bien, estas opciones que se le pasan al programa se pueden leer desde C#. Se hace indicando un parámetro especial en Main, un array de strings:

static void Main(string[] args)

Para conocer esos parámetros lo haríamos de la misma forma que se recorre habitualmente un array cuyo tamaño no conocemos: con un "for" que termine en la longitud ("Length") del array:

 
for (int i = 0; i < args.Length; i++)
{
    System.Console.WriteLine("El parametro {0} es: {1}",
      i, args[i]);
}
 

Por otra parte, si queremos que nuestro programa se interrumpa en un cierto punto, podemos usar la orden "Environment.Exit". Su manejo habitual es algo como

 
Environment.Exit(1);
 

Es decir, entre paréntesis indicamos un cierto código, que suele ser (por convenio) un 0 si no ha habido ningún error, u otro código distinto en caso de que sí exista algún error.

Este valor se podría comprobar desde el sistema operativo. Por ejemplo, en MsDos y Windows se lee con "IF ERRORLEVEL", así:

 IF ERRORLEVEL 1 ECHO Ha habido un error en el programa

Una forma alternativa de que "Main" indique errores al sistema operativo es no declarándolo como "void", sino como "int", y empleando entonces la orden "return" cuando nos interese:

 
public static int Main(string[] args)
{
...
  return 1;  
}
 

Un ejemplo que pusiera todo esto en prueba podría ser:

/*---------------------------*/
/*  Ejemplo en C# nº 58:     */
/*  ejemplo58.cs             */
/*                           */
/*  Parámetros y valor de    */
/*  retorno de "Main"        */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class Ejemplo58
{
 
  public static int Main(string[] args)
  {
    Console.WriteLine("Parámetros: {0}", args.Length);
 
    for (int i = 0; i < args.Length; i++)
    {
      Console.WriteLine("El parámetro {0} es: {1}",
        i, args[i]);
    }
 
    if (args.Length == 0) 
    {
      Console.WriteLine("Escriba algún parámetro!");
      Environment.Exit(1);
    }
 
    return 0;
 
  }
 
}
 

Ejercicios propuestos: