如何获取String.Format来执行?

时间:2010-08-05 02:15:33

标签: c# stringbuilder 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}

也许,我应该把我的代码片段放在一个方法中。但是,那么呢?

5 个答案:

答案 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");

所以诀窍就是通过使用双{}来逃避{{}}