как правильно использовать двойные кавычки?

#c# #xml #vb.net

#c# #xml #vb.net

Вопрос:

 This form works in VB .NET

sendMsg = "<CStatus timestamp=""0"" " amp; _
                   "type=""login"" " amp; _
                   "cid = """ amp; cID amp; """ " amp; _
                   "key=""" amp; loginKey amp; """ />"
  

Но я не могу заставить его работать на C#

 sendMsg = "<CStatus timestamp="0" 
                    type="login" 
                    cid=""   cID   "" 
                    key=""   loginKey   "" />";
  

это не дает такого же эффекта

Я хочу, чтобы это было выводом:

 <CStatus timestamp="0" type="login" cid="var_cid" key="var_key"/>;
  

есть ли какая-либо команда stringXml в C # или другой способ использования двойных кавычек в строке?

Спасибо!


Решил это с помощью

  XmlTextWriter
  

Спасибо вам всем!

Комментарии:

1. Используйте String.Format и Verbatim Strings .

2. Я хочу использовать двойные кавычки в строке

Ответ №1:

Встроенные переводы строк не поддерживаются для строковых литералов в C #. Попробуйте:

 sendMsg = "<CStatus timestamp="0" "  
                    "type="login" "  
                    "cid=""   cID   "" "  
                    "key=""   loginKey   "" />";
  

Похоже, ваша проблема не связана с использованием кавычек.

Комментарии:

1. он выдает в качестве выходных данных: <CStatus timestamp=»0″ type=»login» cid=»cid» key=»key » />

2. Что дает в качестве вывода? Вы не показали, как вы пишете строку. Возможно, метод, который вы используете для записи строки, заключается в повторном экранировании кавычек.

3. Я не использую какой-либо метод, я понимаю, что он работает в Vb .net, но не в c #.

4. Возможно, вы смотрите на дисплей отладчика? Возможно, для вас это экранирование кавычек. Попробуйте следующее: выведите длину вашей sendMsg строки, а затем посчитайте символы. Посмотрите, содержит ли ваша строка только " или " путем подсчета символов.

5. @Vural Acar: Я протестировал код Грега, и результат таков: <CStatus timestamp="0" type="login" cid="1" key="2" /> (заменил переменные cID и LoginKey на 1 и 2). Итак, он работает правильно.

Ответ №2:

Другой вариант — использовать классы XElement и XAttribute, которые будут работать как в VB, так и в C#:

 string cID = "blah";
string loginKey = "foo";

var xml = new XElement("CStatus",
              new XAttribute("timestamp", "0"),
              new XAttribute("type", "login"),
              new XAttribute("cid", cID),
              new XAttribute("key", loginKey)
          );

string sendMsg = xml.ToString();
  

Ответ №3:

При использовании кавычек в C # вы бы экранировали их обратной косой " чертой, как вы уже пробовали.

Однако, когда вы разбиваете свою строку на несколько строк, попробуйте альтернативный путь выделения строки, @ а затем удваивайте кавычки для правильного экранирования.

 string theString = @"<CStatus timespamp=""0""
                              type=""login""
                     />"; // fill in the rest
  

Ответ №4:

 String.Format(@"<CStatus timestamp=""0""
                         type=""login""
                         cid=""{0}""
                         key=""{1}"" />", cID, loginKey);
  

Ответ №5:

Есть несколько способов, которыми вы можете это сделать.

В том виде, в котором вы пытаетесь это сделать, это не сработает. Вы пытаетесь поместить новую строку в постоянную строку. Вам придется переписать его как:

 sendMsg = "<CStatus timestamp="0" "  
                "type="login" "  
                "cid=""   cID   "" "   
                "key=""   loginKey   "" />";
  

Обратите внимание на дополнительные в конце каждой строки и на то, что каждая строка является собственной строковой константой.

Я думаю, что было бы проще просто использовать String .Формат в этом случае:

 sendMsg = String.Format("<CStatus timestamp="0" type="login" cid="{0}" key="{1}" />",
              cID, loginKey);
  

Ответ №6:

В c # кавычки экранируются следующим образом: " например, timestamp="0" с двойными кавычками должно быть timestamp=""0""

Ответ №7:

Попробуйте использовать двойные кавычки, как в vb, но начните определение строки с @

 string myString = @"<xml attribute=""my attribute""/>";
  

Вы можете проверить эту ссылку, чтобы увидеть другие способы использования двойных кавычек: http://weblogs.sqlteam.com/mladenp/archive/2008/10/21/Different-ways-how-to-escape-an-XML-string-in-C.aspx

Комментарии:

1. Я все еще читаю статью, я отвечу как можно скорее

Ответ №8:

 sendMsg = "<CStatus timestamp="0" "    
                    "type="login" "   
                    "cid=""   cID   ""  
                    "key=""   loginKey   "" />";
  

Ответ №9:

 sendMsg = @"<CStatus timestamp=""0"" type=""login"" cid="""   cID   """ key="""   loginKey   """ />";
  

Ответ №10:

Как говорит Грег Хьюгилл, у вас есть новые строки в строках в версии c #.

Вы действительно должны использовать String .Формат здесь, но чтобы ответить на ваш вопрос, ваш код должен выглядеть так:

 sendMsg = "<CStatus timestamp="0"    
                    "type="login""   
                    "cid=""   cID   """   
                    "key=""   loginKey   "" />";
  

В виде строки.Формат вызова, это было бы:

 sendMsg = String.Format(@"<CStatus timestamp=""{0}"" 
         type=""{1}"" 
         cid=""{2}"" 
         key=""{3}""/>", 0, login, cID, loginKey );         
  

Комментарии:

1. Для кавычек в литеральных строках вам нужно использовать два знака кавычек. В противном случае он будет думать, что это конец открытой строки литерала.