如何让与的String.Format一个字符串来执行?
-
25-09-2019 - |
题
我的代码(见下文)有点块被返回字符串:
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");
因此,关键是简单地通过使用一个双{
或}
逃脱{{
或}}
。