我正在尝试实现一个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);
答案 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]);
}