2010-08-05 51 views
0

我有一个代码块小(见下文),它返回字符串:如何获得一个字符串与String.Format来执行?

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

你能编辑你的代码吗?即时通讯很难真正了解你在做什么。 – hvgotcodes 2010-08-05 02:26:14

+0

我认为标签是错误的;你想在java或C#中做到这一点? – 2010-08-05 02:28:21

+0

java标签显然是错误的(由另一个用户添加,而不是OP),所以我修复了它。 – Gabe 2010-08-05 06:01:01

回答

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,当然。

+0

让我想到 – 2010-08-05 09:54:51

+0

第一次没有工作 – 2010-08-05 10:07:09

+0

至于第二 - 宾果!唯一的问题:有没有办法让棋子[0],棋子[1]动态?因此,如果有3件产品,我不需要更改代码。就我个人而言,我不这么认为。 – 2010-08-05 10:13:37

0

我不认为你可以执行它。Java是不是一个真正的解释型语言。

您可以使用脚本语言(甚至可以在你的Java应用程序中嵌入,因为我知道,从JDK6开始)为此目的,如Groovy

0

你可以使用正则表达式来解析三个参数出字符串,然后将它们传递到一个真正的,实际的String.Format方法:-)

+0

除此之外,我认为你要找的东西是一个“表达评估者”,所以你可以谷歌的,一旦上述语言辩论解决了...... – LesterDove 2010-08-05 02:55:01

0

看起来你想要的东西是这样的:

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

也许我完全不理解你的问题,但它听起来像你需要格式化格式字符串。如果这是真的,你也许可以尝试这样的事:

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

因此,关键是简单地通过使用双{{}}逃脱{}

相关问题