Registrar uma mensagem com um número variável de argumentos de estilo printf
-
12-09-2019 - |
Pergunta
Eu estou tentando implementar um método C # que pode registrar uma mensagem com uma seqüência de formato e um número variável de argumentos de estilo printf. Idealmente, ele iria trabalhar de forma idêntica à função C I colado abaixo, embora idiomática para C # é claro.
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 função é conveniente para mim, pois me permite fazer as seguintes chamadas:
LogMessage("Testing");
LogMessage("Testing %s", "1 2 3");
LogMessage("Testing %d %d %d", 1, 2, 3);
Solução
static void LogMessage(string format, params object[] args) {
File.AppendAllText("log.txt", string.Format(format, args));
}
LogMessage("Testing {0} {1}", 1, "hi");
Outras dicas
Você deseja criar um função variádica
C # usa o params palavra-chave para fazer isso
static void LogMessage(string formatString, params string[] formatArguments)
{
string.Format(formatString, formatArguments);
}
Por favor, note que os params palavra-chave só podem ser usados ??no última parâmetro na assinatura do método e que requer o parâmetro a ser um array .
Este é o açúcar apenas sintático para realmente passar um array.
static void LogMessage(params string [] logList)
{
for ( int i = 0 ; i < logList.Length ; i++ )
doLogging(logList[i]);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow