簡體   English   中英

如何獲得一個字符串與String.Format執行?

[英]how to get a String with String.Format to execute?

我有一小段代碼(請參見下文)返回字符串:

string.Format("{0}----{1}",3,"test 2");

所以我怎樣才能真正地“執行”呢? 要運行{0}和{1}的格式/替換嗎?

我的代碼段:

StringBuilder sb = new StringBuilder();
sb.Append("{0}----{1}\",");
sb.AppendFormat(ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));
string sbStr = "=string.Format(\""+sb.ToString()+");";

是的,ReturnParamValue給出DTO的實際值。

無論如何,我看了以下內容(但未說明如何執行它: 如何獲取String.Format而不解析{0}

也許,我只應該將我的代碼片段放在一個方法中。 但是,那又怎樣呢?

為什么在字符串本身中包含String.Format?

如果您正在尋找一個通用的“讓我來評估我在字符串中建立的這個任意表達式”,那么這里沒有一個簡單的答案。

相反,如果您正在研究如何從函數調用中為字符串提供參數,那么您將陷入困境,並且工作太辛苦。

根據您的原始代碼嘗試以下操作:

string result
    = string.Format(
        "{0}----{1}",
        ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));

不過,由於您的原始代碼似乎僅提供一個值,並且格式字符串中有兩個值,因此這並不完全有效- {0}將替換為函數中的值,而{1}不變。

您期望什么輸出?

您的ReturnParamValue()函數是否嘗試在單個字符串中返回標簽和值? 如果是這樣,並且用逗號分隔,則可以嘗試以下操作:

var value = ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));
var pieces = string.Split(',');
string result
    = string.Format( "{0}----{1}", pieces[0], pieces[1]);

如果ReturnParamValue()是您控制的方法,則這會非常困難。

8月6日星期五更新

string.Format()string.Format()的聲明, 如MSDN所示

public static string Format(
    string format,
    params Object[] args
)

與您可能在C中針對printf()看到的特殊string.Format()不同, string.Format()處理多個參數的方式沒有什么特殊或不同尋常。 關鍵是params關鍵字,它要求編譯器提供一些“語法糖” ,在該語法中它將參數組合成一個數組。

這里的關鍵是,如果您已經傳遞了單個object[]則不會發生包裝-因此,如果您願意,可以執行以下操作:

object[] parameters 
    = ReturnParamValues(siDTO, "siDTO.SuggestionItemID,siDTO.Title");
string result
    = string.Format("{0}----{1}----{2}", parameters);

但是,如果我在自己維護的任何代碼庫中看到類似的東西,我都會將其視為代碼氣味,並尋求一種更好的方法來解決該問題。

僅僅因為有可能並不意味着它是可取的 YMMV,當然。

我認為您無法執行它。 Java並不是真正的解釋語言。

您可以出於這種目的使用腳本語言(據我所知,它甚至可以嵌入到Java應用程序中,從JDK6開始),例如Groovy。

您可以使用RegEx解析字符串中的三個參數,然后將它們傳遞給實際的字符串。Format方法:-)

看起來您想要的是這樣的:

string sbStr = string.Format("{0}----{1}", siDTO.SuggestionItemID, siDTO.Title);

也許我不完全理解您的問題,但是聽起來您需要格式化格式字符串。 如果是這樣,您可以嘗試執行以下操作:

int width = 5;
string format = String.Format("{{0,{0}}}----{{1,{0}}}", width);
string result = String.Format(format, "ab", "cd");

因此,關鍵是簡單地逃脫{}通過使用雙{{}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM