В пойманном исключении -> e.Data.Clear ();// что это должно делать? - PullRequest
1 голос
/ 30 августа 2011

Я видел что-то подобное слишком много раз:

try
{
    //something
}
catch (FileNotFoundException e)
{
    e.Data.Clear(); // <- WTF?
}

и насколько я знаю, это бесполезное вуду, но, пожалуйста, поправьте меня, если я ошибаюсь.

1 Ответ

4 голосов
/ 30 августа 2011

Исключения в .Net позволяют связывать с ними произвольные данные, помещая их в Data член Exception. По сути, это слабо типизированный словарь, который выполняет минимальные проверки, чтобы гарантировать, что хранимая информация является сериализуемой.

Эта конкретная функция просто удаляет все пользовательские связанные данные. Почему это немного загадка, так как разработчик не оставил комментариев.

Что касается того, бесполезно это или нет. По всей вероятности капот да. Единственный конкретный случай, когда это может быть полезно, если создатель FileNotFoundException добавил ссылку на объект в сумку Data и сам удерживает ссылку на экземпляр FileNotFoundException. В этом конкретном случае вызов Clear может предотвратить утечку памяти, удалив ссылку на объект, который должен быть недолговечным. Я считаю очень маловероятным, что это так, хотя. Мой инстинкт должен был бы сообщить об ошибке / удалить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...