首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在String.Format中转义C#中的双引号

在String.Format中转义C#中的双引号
EN

Stack Overflow用户
提问于 2015-07-23 07:08:15
回答 2查看 2.4K关注 0票数 1

我试图获得参数元素的'Id‘属性,将其括在双引号中。我首先试图逃避引语,这是我第一次尝试做到这一点:

代码语言:javascript
复制
buffer = String.Format("{0}" + "<Parameter Id=" + "{1}" + ">" + "{2}" + "</Parameter>", buffer, id, param);

使用上面的代码,可以看到转义字符的出现,以及引号:

代码语言:javascript
复制
<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id=\"1\">Gemstone3</Parameter>

我的第二次尝试是基于我在IRC上收到的建议,一位同事建议我也许可以用“”来获取我的报价,ala:

代码语言:javascript
复制
buffer = String.Format("{0}" + "<Parameter Id=" + "&quot;" + "{1}" + "&quot;" + ">" + "{2}" + "</Parameter>", buffer, id, param);

该方法只生成最终结果中的文字‘“字符串:

代码语言:javascript
复制
<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id=&quot;1&quot;>Gemstone3</Parameter>

在绝望中,我继续前进,只是在字符串中添加了文字双引号。

我这么做是因为我在本代码项目条款上读到,在String.Format中唯一需要担心转义的字符是大括号和(惊喜,惊喜),这甚至是不可编译的,有和没有前面的@。对我大喊大叫的错误包括:

只有赋值、调用、增量、递减、等待和新的对象表达式可以用作语句;预期的)预期的...and等等

如能在此问题上提供任何帮助,将不胜感激。我知道这一定是我错过的琐碎的东西,最好的难题。:/

下面是整个BuildCommand方法:

代码语言:javascript
复制
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;
            }
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-23 07:54:26

你可以用正确的方法

代码语言:javascript
复制
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);
        }
    }
}
​
票数 1
EN

Stack Overflow用户

发布于 2015-07-23 07:15:51

你必须用"\来逃避

代码语言:javascript
复制
String.Format("\"{0}\"<Parameter Id=\"{1}\">\"{2}\"</Parameter>", buffer, id, param);

还可以使用逐字字符串文字,然后必须使用双引号:

代码语言:javascript
复制
String.Format(@"""{0}""<Parameter Id=""{1}"">""{2}""</Parameter>", buffer, id, param);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31580425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档