可能重复:
how to add { in String Format c#
当我总是重写相同的东西时,我习惯于写我所说的字符串模式。
假设我想做SQL注入来扩展ORM功能..。
protected static string FULLTEXTPATTERN = "EXISTS CONTAINSTABLE([{0}],*,'\"{1}\"') WHERE [key] = {0}.id;通常,我得到的表名和值组合在一个string.format中(FULLTEXTPATTERN,.)一切都很好。
想象一下,我必须在两次内做到这一点。首先注入表名,然后输入我搜索的值。所以我想写这样的东西:
protected static string FULLTEXTPATTERN = "EXISTS CONTAINSTABLE([{0}],*,'\"{{0}}/*Something that returns {0} after string.format*/\"') WHERE [key] = {0}.id;
...
var PartialPattern= string.fomat(FULLTEXTPATTERN, "TableX");
//PartialPattern = "EXISTS CONTAINSTABLE([TableX],*,'\"{0}\"') WHERE [key] = {0}.id"
...
//later in the code
...
var sqlStatement = string.format(PartialPattern,"Pitming");
//sqlStatement = "EXISTS CONTAINSTABLE([TableX],*,'\"Pitming\"') WHERE [key] = {0}.id"有办法吗?
发布于 2012-03-28 12:33:10
逻辑上说,您只需将{{{0}}}放在格式字符串中,以便在第二个string.Format调用之后将其还原为{0},但不能这样做--这会抛出一个FormatException。但这是因为您还需要另一个{和},否则它的格式就不正确了:)。
您可以做的是-将您的完整格式设置为此(请注意后面的4个{和}字符):
"EXISTS CONTAINSTABLE([{0}],*,'\"{{0}}\"') WHERE [key] = {{{{0}}}}.id";  然后,您的最后一个字符串将包含您期望的{0}。
作为一个证明-运行此测试:
    [TestMethod]
    public void StringFormatTest()
    {
        string result = string.Format(string.Format(
          "{0} {{0}} {{{{0}}}}", "inner"), "middle");
        Assert.AreEqual("inner middle {0}", result);
    }发布于 2012-03-28 12:25:02
是否有可能将生成SQL的时间推迟到有所有必需的输入,以便可以使用一个对String.Format()和多个字段的调用?
或者,您可以使用StringBuilder而不是String.Format()迭代构建查询。
https://stackoverflow.com/questions/9907371
复制相似问题