Документация кажется достаточно ясной в отношении ее использования (выделение добавлено):
Получает коллекцию пар ключ / значение, которые предоставляют дополнительную пользовательскую информацию об исключении .
Почему он вообще существует? Я предполагаю, что это та же самая причина, по которой Control
имеет Tag
свойство . В первые дни .NET (прежде чем каждый программист Боб и Бетти понимали объекты и наследование) они хотели сделать API-интерфейс достаточно простым, чтобы каждый мог понять, как добавить дополнительные данные к вещам.
Однако смысл создания пользовательских исключений, вытекающих из System.Exception
, не обязательно должен включать дополнительную информацию, но чтобы позволить клиенту ограничить перехватываемые им исключения только теми, которые они может справиться. Если они знают, как обрабатывать набор определенных исключений, которые может генерировать ваш код, они должны иметь возможность только перехватывать эти исключения, без необходимости отлавливать базовый класс System.Exception
. Что вам определенно следует никогда делать, так это требовать, чтобы клиентский код перехватывал неспецифический класс исключений и считывал свойство, чтобы определить, какой это тип исключения (и, следовательно, могут ли они его обрабатывать) ,
Честно говоря, я никогда раньше не использовал это свойство. Я должен был проверить документацию, чтобы даже увидеть, что она действительно существует. Но я думаю, что это наиболее полезно для реализации пользовательских журналов исключений. Вы можете вставить много важной информации в свойство Data
(независимо от уровня происхождения класса исключений), а затем передать ее в свой код регистрации. Отражатель указывает, что он используется внутри в нескольких местах именно для этой цели. Также приятно, что вся информация, которую вы здесь предоставляете, автоматически сериализуется для вас автоматически.