Eme*_*gul 6 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这个功能对我来说很方便,因为它允许我进行以下调用:
LogMessage("Testing");
LogMessage("Testing %s", "1 2 3");
LogMessage("Testing %d %d %d", 1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
Jim*_*mmy 15
static void LogMessage(string format, params object[] args) {
File.AppendAllText("log.txt", string.Format(format, args));
}
LogMessage("Testing {0} {1}", 1, "hi");
Run Code Online (Sandbox Code Playgroud)
您想要创建一个可变参数函数
C#使用params关键字来执行此操作
static void LogMessage(string formatString, params string[] formatArguments)
{
string.Format(formatString, formatArguments);
}
Run Code Online (Sandbox Code Playgroud)
请注意,params关键字只能用于方法签名中的最后一个参数,并且它要求参数为数组.
这只是实际传递数组的语法糖.