Подтвердить что ты не робот

Неожиданное исключение из конструктора XDocument

Это отлично работает:

XDocument xdoc = new XDocument(
   new XDeclaration("1.1", "UTF-8", "yes"),
   new XProcessingInstruction("foo", "bar"),
   new XElement("test"));

Однако, если я изменю его, чтобы передать "params array" явно как массив:

object[] content = new object[] {
   new XDeclaration("1.1", "UTF-8", "yes"),
   new XProcessingInstruction("foo", "bar"),
   new XElement("test")
};
xdoc = new XDocument(content);

Сбой:

System.ArgumentException: символы небезопасного пробела не могут быть добавлены в контент.

Разве эти два примера не эквивалентны? Что здесь происходит?

4b9b3361

Ответ 1

Когда вы используете первый метод, вы используете перегрузку XDocument, которая сначала принимает XDeclaration, а затем параметры для содержимого. Однако, когда вы используете второй подход, вы используете перегрузку, которая принимает параметры для контента. XDeclaration в вашем массиве object [] проходит через контент и что там он взрывается.

Смотрите здесь: http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.xdocument.aspx

Ответ 2

Вы можете получить эту ошибку при анализе строк XML, если вы используете конструктор XDocument вместо метода factory.

Дано:

var xmlString = "<some-xml />";

Это не удается:

var doc = new XDocument(xmlString);

Это работает:

var doc = XDocument.Parse(xmlString);