【发布时间】:2015-07-23 07:08:15
【问题描述】:
我正在尝试将 Parameter 元素的“Id”属性用双引号括起来。我首先尝试简单地逃避引用,这是我尝试实现的第一件事:
buffer = String.Format("{0}" + "<Parameter Id=" + "{1}" + ">" + "{2}" + "</Parameter>", buffer, id, param);
通过上面的代码我得到了这个,你可以看到转义字符和引号一起显示:
<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id=\"1\">Gemstone3</Parameter>
我的第二次尝试是基于我在 IRC 上收到的建议,一位同事建议我可以使用 '"' 来获取我的报价单,唉:
buffer = String.Format("{0}" + "<Parameter Id=" + """ + "{1}" + """ + ">" + "{2}" + "</Parameter>", buffer, id, param);
这个方法在最终结果中只产生了字面量 '"' 字符串:
<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id="1">Gemstone3</Parameter>
无奈之下,我只好在字符串中添加了文字双引号。
我这样做是因为我在This Codeproject Article 上读到,我需要担心转义的 String.Format 中唯一的字符是花括号,而且(惊喜,惊喜)这甚至不能编译,有和没有前面的@。对我大喊一大堆错误,包括:
只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句 ;预期的 ) 预期的 ...等等
对于此事的任何帮助将不胜感激。我知道这一定是我想念的微不足道的东西,最好的难题。 :/
这是整个 BuildCommand 方法:
public string BuildCommand(string _command, string[] _parameters = null)
{
int id = 1;
string buffer = String.Format("<Conquest><User>"+"{0}"+"</User><Token>"+"{1}"+"</Token><Command>"+"{2}"+"</Command>", _playerName, _token, _command);
if (_parameters != null)
{
foreach (string param in _parameters)
{
if (param.Length < 1 || param == null)
break;
buffer = String.Format("{0}" + "<Parameter Id=" + "{1}" + ">" + "{2}" + "</Parameter>", buffer, id, param);
// buffer = String.Format(@"""{0}""<Parameter Id=""{1}"">""{2}""</Parameter>", buffer, id, param);
id += 1;
}
}
【问题讨论】:
-
您的示例与实际发生的情况不符。以您的第一个示例为例:如果您实际运行该代码,您会得到:dotnetfiddle.net/rkXISA 这不是您报告的内容。所以其他一些奇怪的事情正在发生。也许你的 'id' 变量是一个已经包含引号的字符串?
-
您是否从调试器中看到了这个值?因为,它确实显示了字符串中不存在的转义字符。当您单击眼镜图标时,它们是否仍会出现?或者在调试工具之外打印/显示它们?
id是字符串还是整数?如果它是一个字符串,您是否确定它本身不包含引号? -
这是我的价值观。
<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>Validate</Command><Parameter Id=1>Gemstone3</Parameter></Conquest>\r\n -
@BackSlashAttack 那么你正在做一些超出你给我们的代码的事情。例如,您还没有告诉我们在您显示的内容和打印它之间的字符串会发生什么。