首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在两个string.Format调用后保留"{0}“

如何在两个string.Format调用后保留"{0}“
EN

Stack Overflow用户
提问于 2012-03-28 12:20:41
回答 2查看 297关注 0票数 1

可能重复:

how to add { in String Format c#

当我总是重写相同的东西时,我习惯于写我所说的字符串模式。

假设我想做SQL注入来扩展ORM功能..。

代码语言:javascript
运行
复制
protected static string FULLTEXTPATTERN = "EXISTS CONTAINSTABLE([{0}],*,'\"{1}\"') WHERE [key] = {0}.id;

通常,我得到的表名和值组合在一个string.format中(FULLTEXTPATTERN,.)一切都很好。

想象一下,我必须在两次内做到这一点。首先注入表名,然后输入我搜索的值。所以我想写这样的东西:

代码语言:javascript
运行
复制
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"

有办法吗?

EN

回答 2

Stack Overflow用户

发布于 2012-03-28 12:33:10

逻辑上说,您只需将{{{0}}}放在格式字符串中,以便在第二个string.Format调用之后将其还原为{0},但不能这样做--这会抛出一个FormatException。但这是因为您还需要另一个{},否则它的格式就不正确了:)。

您可以做的是-将您的完整格式设置为此(请注意后面的4个{}字符):

代码语言:javascript
运行
复制
"EXISTS CONTAINSTABLE([{0}],*,'\"{{0}}\"') WHERE [key] = {{{{0}}}}.id";  

然后,您的最后一个字符串将包含您期望的{0}

作为一个证明-运行此测试:

代码语言:javascript
运行
复制
    [TestMethod]
    public void StringFormatTest()
    {
        string result = string.Format(string.Format(
          "{0} {{0}} {{{{0}}}}", "inner"), "middle");
        Assert.AreEqual("inner middle {0}", result);
    }
票数 1
EN

Stack Overflow用户

发布于 2012-03-28 12:25:02

是否有可能将生成SQL的时间推迟到有所有必需的输入,以便可以使用一个对String.Format()和多个字段的调用?

或者,您可以使用StringBuilder而不是String.Format()迭代构建查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9907371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档