string.Format() 出现“输入字符串的格式不正确”错误

134

我在这里做错了什么?

string tmp = @"
    if (UseImageFiles) {
        vCalHeader += ""<td><img onmousedown='' src= '{0}cal_fastreverse.gif' width='13px' height='9' onmouseover='changeBorder(this, 0)' onmouseout='changeBorder(this, 1)' style='border:1px solid white'></td>\n""; //Year scroller (decrease 1 year)
        calHeight += 22;
    }";

string x = "xter";
tmp = string.Format(tmp, x);

我在尝试更改{0}时,收到了“输入字符串格式不正确”的消息。这是在C#和WinForms中进行的操作。

格式异常未处理
输入字符串格式不正确

我得到的故障排除提示如下:

确保您的方法参数格式正确。当将字符串转换为日期时间时,请解析该字符串以取出日期,然后将每个变量放入DateTime对象之前。

2个回答

350

string.Format()函数将每个 '{' 或 '}' 视为占位符的一部分(就像您已经使用的 '{0}')。您需要通过将其加倍来转义每个文字上的出现。

因此,在您的情况下,应该这样做:

 string tmp = @"
    if (UseImageFiles) {{
        ...
    }}";

2
如果我曾经看过一个完美的StackOverflow问答示例,那么这就是它。 - Westley Bennett

0
1. 不要在同一输入字符串中同时使用未转义的大括号和已转义的大括号。 2. 如果输入字符串包含任何转义的大括号,请确保它没有以美元符号为前缀。否则,使用转义的左大括号可能会导致上述异常。如果只有转义的右大括号,则其中一个可能会被忽略。 注:此建议仅基于 StringBuilder 的 AppendFormat() 方法的使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接