0

我有一小段代码(见下文)正在返回字符串:

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}

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

4

5 回答 5

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

于 2010-08-05T06:14:22.630 回答
0

您可以使用 RegEx 解析字符串中的三个参数,然后将它们传递给一个真实的、实际的 string.Format 方法:-)

于 2010-08-05T02:52:20.070 回答
0

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

string sbStr = string.Format("{0}----{1}", siDTO.SuggestionItemID, siDTO.Title);
于 2010-08-05T06:03:17.350 回答
0

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

您可以为此目的使用脚本语言(据我所知,它甚至可以嵌入到您的 Java 应用程序中,从 JDK6 开始),例如 Groovy

于 2010-08-05T02:36:46.730 回答
0

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

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

所以诀窍是简单地通过使用双or来逃避{or 。}{{}}

于 2010-08-05T06:42:27.487 回答