6

フォーマット文字列と可変数の printf スタイルの引数を使用してメッセージをログに記録できる C# メソッドを実装しようとしています。理想的には、以下に貼り付けた 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);
4

3 に答える 3

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

LogMessage("Testing {0} {1}", 1, "hi");
于 2009-06-05T20:47:09.363 に答える
9

可変引数関数を作成したい

C# はparamsキーワードを使用してこれを行います

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

params キーワードは、メソッド シグネチャの最後のパラメーターでのみ使用でき、パラメーターが配列である必要があることに注意してください。

これは、実際に配列を渡すための単なる構文糖衣です。

于 2009-06-05T20:57:07.377 に答える
0
static void LogMessage(params string [] logList)
{
    for ( int i = 0 ; i < logList.Length ; i++ )
       doLogging(logList[i]);
}
于 2009-06-05T20:50:53.380 に答える