Runtime: Добавить TryParse в XDocument

Созданный на 15 июн. 2016  ·  3Комментарии  ·  Источник: dotnet/runtime

Привет, это RFC выдает поддержку запроса и за добавление bool TryParse(string text, out XDocument document) метода на XDocument класса.

Я обыскал репозиторий, но не нашел ничего похожего, поэтому, если это обман, не стесняйтесь закрывать.

Проблема:

Иногда бывает так, что вам приходится работать с XML-файлами, полученными из _ненадежных_ источников, и вы должны убедиться, что файл на самом деле является правильно сформированным XML.

В настоящее время есть несколько не очень хороших способов проверить, что строка является правильно сформированным XML, который включает обработку исключений.

Ни один из предложенных способов не выглядит чистым решением довольно распространенной проблемы (по крайней мере, IMO).

Также обратите внимание, что другие классы BCL, которые предоставляют метод Parse(string source) обычно также предоставляют метод bool TryParse(string source, out...) поэтому добавление метода TryParse сделает класс XDocument несколько более совместимым с другие классы БКЛ.

Предположение:

добавить следующий метод

bool TryParse(string text, out XDocument document)

до классов XDocument и XElement

Вопрос:

Нужна ли нам четность функций с классами XmlDocument ?
На самом деле XmlDocument предоставляет LoadXml(string xml) поэтому мы могли бы добавить bool TryLoadXml(string xml, out XmlDocument document) но мне действительно не нравится это имя, и поэтому, если паритет функций не является обязательным, я бы предпочел не добавление его.

area-System.Xml

Самый полезный комментарий

@weshaggard ,

Помимо удобства, метод TryParse позволит разработчику пропустить накладные расходы, связанные с блоками try/catch и созданием экземпляра ненужного XmlException он/она может даже не заботиться.

Я тоже был очень удивлен, обнаружив, что такого метода не существует. :|

Все 3 Комментарий

Мы рассмотрели это и не до конца понимаем ценность добавления метода TryParse в этом случае. Хотя согласованность с другими типами BCL несколько интересна, в таких случаях она гораздо полезнее, потому что вы потенциально анализируете многие из них, и поэтому возникает проблема с производительностью. В этом случае производительность на самом деле не будет проблемой, потому что стоимость исключения ничтожна по сравнению со стоимостью синтаксического анализа всего XML-документа. Кроме того, с помощью методов Parse вы получите исключение XmlException для ошибок, которое дает дополнительную информацию, указывающую на ошибку синтаксического анализа, которой не было бы в случаях TryParse.

В подобных случаях API-интерфейсы Roslyn не предлагают метод TryParse для анализа файла CS либо потому, что вам обычно требуется больше контекста для любых ошибок, но даже это может быть излишним для анализа XML-документов, поэтому у нас есть золотая середина базовой информации в XmlException.

Спасибо за проблему и ее описание, но по этим причинам мы не думаем, что добавление метода TryParse к ним имеет большое значение.

@weshaggard ,

Помимо удобства, метод TryParse позволит разработчику пропустить накладные расходы, связанные с блоками try/catch и созданием экземпляра ненужного XmlException он/она может даже не заботиться.

Я тоже был очень удивлен, обнаружив, что такого метода не существует. :|

Лично для меня ответ @weshaggard не имеет смысла. Imo все люди, использующие .NET более полугода, полностью осведомлены об объяснениях в первой части поста @weshaggard. Отсутствие обработки и невнимательности к ошибкам в деталях, по крайней мере для меня за последние 20 лет, является ГЛАВНОЙ причиной использования варианта TryParse(), если класс его предоставляет.

Я думаю, что многие люди уже пришли сюда за последние X лет, посмотрев на сообщение stackoverflow об этом, и сказали: «О, действительно нет TryParse () в XDocument. Странно».

Но, ... что угодно.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

matty-hall picture matty-hall  ·  3Комментарии

bencz picture bencz  ·  3Комментарии

Timovzl picture Timovzl  ·  3Комментарии

jamesqo picture jamesqo  ·  3Комментарии

yahorsi picture yahorsi  ·  3Комментарии