代码之家  ›  专栏  ›  技术社区  ›  Emerick Rogul

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

  •  6
  • Emerick Rogul  · 技术社区  · 17 年前

    我正在尝试实现一个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 回复  |  直到 17 年前
        1
  •  15
  •   Jimmy    17 年前
    static void LogMessage(string format, params object[] args) {
        File.AppendAllText("log.txt", string.Format(format, args));
    }
    
    LogMessage("Testing {0} {1}", 1, "hi");
    
        2
  •  9
  •   dss539    17 年前

    您想创建一个 variadic function

    C#使用 params

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

    最后的

    这仅仅是用于实际传递数组的语法糖。

        3
  •  0
  •   Marcus Johnson Marcus Johnson    17 年前
    static void LogMessage(params string [] logList)
    {
        for ( int i = 0 ; i < logList.Length ; i++ )
           doLogging(logList[i]);
    }