C# 打印一个字符串,例如;你好{0}”;

C# 打印一个字符串,例如;你好{0}”;,c#,.net,C#,.net,在应用程序中,我从以下格式的配置加载字符串stackoverflow.com?questionId={0}。显然,它们在运行时填充并用于查询字符串 我想在启动时使用以下方法记录这些字符串: void log(string message, params object[] vars) { string s = String.Format(message, vars); Console.WriteLine(s); }

在应用程序中,我从以下格式的配置加载字符串
stackoverflow.com?questionId={0}
。显然,它们在运行时填充并用于查询字符串

我想在启动时使用以下方法记录这些字符串:

void log(string message, params object[] vars)
        {
            string s = String.Format(message, vars);
            Console.WriteLine(s);
        }
但是,正如您所期望的那样,
String.Format
会抛出一个异常,因为调用:
log(String.Format(“添加新提要”{0}',“stackoverflow.com?questionId={0}”)
-
String.Format
尝试在“log()”内替换
{0}/code>


有没有一种简单的方法可以转义
{
字符,这样就不会尝试替换?

我找到了两个答案

首先,我通过以下操作避开了大括号:

log(String.Format(“添加新提要“{0}”,feedStr.Replace(“{”,“{”).Replace(“}”,“}”);

这个很好用

其次,正如马丁·布朗所建议的那样,我意识到我可以:

log("Adding new feed '{0}'", feedStr);

只要加倍:
{0}
{{0}
但是@DmitryBychenko打破了实际的使用……这些应该被替换,问题只是它们的日志记录。啊,我看到了这个困境。你不能两全其美。你可能需要在日志方法中添加一个重载,它不接受
参数,也不调用
字符串.format
。投票重新打开since你不是问“如何引用占位符”,而是“我有时如何假装它们不是占位符”试试:
log(@“stackoverflow.com?questionId={0}”)
我不确定它是否有效,但你可以试试。不要使用
string.format()
然后使用字符串串联,比如
string str=“Adding new feed{0}”+string.format(“stackoverflow.com?questionId={0}”,值)