在 C# 中转义 String.Format 内的双引号
Escaping double quotes within String.Format in C#
我正在尝试将参数元素的 '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 上收到的建议,一个人建议我可以使用 '"' 来获取我的报价,ala:
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 中唯一需要担心转义的字符是花括号而且(惊讶,惊讶)这甚至没有编译-able,有和没有前面的@。向我大喊一堆错误,包括:
只有assignment、call、increment、decrement、await、new object expression可以作为语句使用
;预期的
) 预期的
...等等
如能就此事提供任何帮助,我们将不胜感激。我知道这一定是我想念的微不足道的事情,最好的难题。 :/
下面是整个 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;
}
}
您必须使用 \
:
转义 "
String.Format("\"{0}\"<Parameter Id=\"{1}\">\"{2}\"</Parameter>", buffer, id, param);
你也可以使用逐字字符串文字,然后你必须使用双引号:
String.Format(@"""{0}""<Parameter Id=""{1}"">""{2}""</Parameter>", buffer, id, param);
你可以用正确的方式做到这一点
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id=\"1\">Gemstone3</Parameter>
string user = "ArchElf";
string token = "0123456789012345678901234567890";
string command = "validate";
int id = 1;
string value = "Gemstrone3";
XElement conquest = new XElement("Conquest");
conquest.Add(new XElement("User", user));
conquest.Add(new XElement("Token", token));
conquest.Add(new XElement("Command", command));
XElement e_parameter = new XElement("Parameter", value);
e_parameter.Add(new XAttribute("Id", id));
conquest.Add(e_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 上收到的建议,一个人建议我可以使用 '"' 来获取我的报价,ala:
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 中唯一需要担心转义的字符是花括号而且(惊讶,惊讶)这甚至没有编译-able,有和没有前面的@。向我大喊一堆错误,包括:
只有assignment、call、increment、decrement、await、new object expression可以作为语句使用 ;预期的 ) 预期的 ...等等
如能就此事提供任何帮助,我们将不胜感激。我知道这一定是我想念的微不足道的事情,最好的难题。 :/
下面是整个 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;
}
}
您必须使用 \
:
"
String.Format("\"{0}\"<Parameter Id=\"{1}\">\"{2}\"</Parameter>", buffer, id, param);
你也可以使用逐字字符串文字,然后你必须使用双引号:
String.Format(@"""{0}""<Parameter Id=""{1}"">""{2}""</Parameter>", buffer, id, param);
你可以用正确的方式做到这一点
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id=\"1\">Gemstone3</Parameter>
string user = "ArchElf";
string token = "0123456789012345678901234567890";
string command = "validate";
int id = 1;
string value = "Gemstrone3";
XElement conquest = new XElement("Conquest");
conquest.Add(new XElement("User", user));
conquest.Add(new XElement("Token", token));
conquest.Add(new XElement("Command", command));
XElement e_parameter = new XElement("Parameter", value);
e_parameter.Add(new XAttribute("Id", id));
conquest.Add(e_parameter);
}
}
}