我的代码(见下文)有点块被返回字符串:

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() 的声明上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,当然。

其他提示

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

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

您可以使用正则表达式来解析三个参数出字符串,然后将它们传递到一个真实的,实际的String.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归因
不隶属于 StackOverflow
scroll top