2012-03-28 64 views
1

可能重複:
how to add { in String Format c#如何保存 「{0}」 經過兩次的String.format調用

當我重寫總是同樣的事情,我已經習慣了寫我稱之爲它的字符串模式。

比方說,我想這樣做的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" 

有沒有辦法做到這一點?

+0

使用佔位符。如果你的圖書館不支持他們......切換。 (表名不能在佔位符中綁定,因此必須手動注入這些名稱。)這種待嵌入的將被替換的{0}'看起來像一場噩夢。考慮:'EXISTS CONTAINSTABLE({table},*,@ value)WHERE ...' – 2012-03-28 12:23:47

+1

相關問題:[如何添加{在字符串格式的c#](http://stackoverflow.com/questions/9084309/how-to -add-in-string-format -c-sharp/9084352#9084352) – 2012-03-28 12:25:17

+0

你只是問如何轉義字符串'{0}'?如果是這樣,你已經回答了它 - 你把大括號{{0}}加倍。你能讓你的問題更清楚嗎? – 2012-03-28 12:28:12

回答

0

是否有可能延遲生成SQL到你有所有必需的輸入點,以便您可以使用一個調用String.Format()和多個字段?

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

1

邏輯上說,你會簡單地把{{{0}}}在格式字符串把它降低到{0}第二string.Format調用後,但你不能 - 拋出一個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); 
    }