使用可变数量的printf样式参数记录消息

时间:2009-06-05 20:42:24

标签: c# logging variadic-functions

我正在尝试实现一个C#方法,该方法可以使用格式字符串和可变数量的printf样式参数来记录消息。理想情况下,它与我下面粘贴的C函数的工作方式完全相同,当然也是C#的惯用语。

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);
  }
}

这个功能对我来说很方便,因为它允许我进行以下调用:

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

3 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:9)

您想要创建variadic function

C#使用params关键字执行此操作

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

请注意,params关键字只能用于方法签名中的 last 参数,并且要求参数为数组

这只是实际传递数组的语法糖。

答案 2 :(得分:0)

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