2009-06-05 18 views
6

Estoy intentando implementar un método C# que pueda registrar un mensaje con una cadena de formato y una cantidad variable de argumentos de estilo printf. Idealmente, funcionaría de manera idéntica a la función C que pegué a continuación, aunque idiomática a C# por supuesto.Registrar un mensaje con un número variable de argumentos de estilo printf

static 
void 
LogMessage(const char * iFormat, ...) 
{ 
    va_list argp; 
    FILE * fp; 

    fp = fopen("log.txt", "a"); 
    if (fp != NULL) { 
    va_start(argp, iFormat); 
    vfprintf(fp, iFormat, argp); 
    va_end(argp); 
    fprintf(fp, "\n"); 
    fclose(fp); 
    } 
} 

Esta función es conveniente para mí, ya que me permite hacer las siguientes llamadas:

LogMessage("Testing"); 
LogMessage("Testing %s", "1 2 3"); 
LogMessage("Testing %d %d %d", 1, 2, 3); 

Respuesta

15
static void LogMessage(string format, params object[] args) { 
    File.AppendAllText("log.txt", string.Format(format, args)); 
} 

LogMessage("Testing {0} {1}", 1, "hi"); 
+0

Gracias, este es exactamente el tipo de cosa que estaba buscando. Tenía algunos de los elementos correctos, ¡pero no podía ponerlos en el "orden" correcto! –

0
static void LogMessage(params string [] logList) 
{ 
    for (int i = 0 ; i < logList.Length ; i++) 
     doLogging(logList[i]); 
} 
9

Usted desea crear un variadic function

C# utiliza el params palabra clave para hacer esto

static void LogMessage(string formatString, params string[] formatArguments) 
{ 
    string.Format(formatString, formatArguments); 
} 

Tenga en cuenta que la palabra clave params sólo se puede utilizar en el último parámetroen la firma del método y que requiere el parámetro a ser una serie .

Esto es simplemente azúcar sintáctico para pasar una matriz.

Cuestiones relacionadas