我有一小段代码(见下文)返回字符串:
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的实际值。
无论如何,我已经看过以下内容(但它没有说明如何执行它: How to get String.Format not to parse {0}
也许,我应该把我的代码片段放在一个方法中。但是,那么呢?
答案 0 :(得分:1)
为什么在字符串本身中包含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()
as shown on MSDN的声明:
public static string Format(
string format,
params Object[] args
)
与您在C中printf()
可能看到的特殊外壳不同,string.Format()
处理多个参数的方式没有什么特别或不寻常的。关键是params关键字,它要求编译器提供一些“语法糖”,它将参数组合成一个数组。
这里的关键是,如果你已经传递了一个object[]
,那么包装不会发生 - 所以如果你想,你可以这样做:
object[] parameters
= ReturnParamValues(siDTO, "siDTO.SuggestionItemID,siDTO.Title");
string result
= string.Format("{0}----{1}----{2}", parameters);
但是,如果我在我维护的任何代码库中看到类似的内容,我会将其视为代码嗅觉,并寻找更好的方法来解决问题。
仅仅因为可能并不意味着它是可取的。当然是YMMV。
答案 1 :(得分:0)
我认为你不能执行它。 Java实际上不是一种解释语言。
您可以使用脚本语言(我甚至可以将其嵌入您的Java应用程序,从JDK6开始),例如Groovy
答案 2 :(得分:0)
您可以使用RegEx解析字符串中的三个参数,然后将它们传递给真实的实际string.Format方法: - )
答案 3 :(得分:0)
看起来你想要的是这样的东西:
string sbStr = string.Format("{0}----{1}", siDTO.SuggestionItemID, siDTO.Title);
答案 4 :(得分:0)
也许我完全不明白你的问题,但听起来你需要格式化格式字符串。如果这是真的你可以尝试这样的事情:
int width = 5;
string format = String.Format("{{0,{0}}}----{{1,{0}}}", width);
string result = String.Format(format, "ab", "cd");
所以诀窍就是通过使用双{
或}
来逃避{{
或}}
。