Я не нахожу, что коды возврата менее ужасны, чем исключения. За исключением Вы имеете try{} catch() {} finally {}
, где как с кодами возврата Вы имеете if(){}
. Я раньше боялся исключений по причинам, приведенным в сообщении; Вы не знаете, должен ли указатель быть очищен, что имеет Вас. Но я думаю, что у Вас есть те же проблемы когда дело доходит до кодов возврата. Вы не знаете состояние параметров, если Вы не знаете некоторые детали о рассматриваемой функции/методе.
Невнимательный, необходимо обработать ошибку, если это возможно. Можно позволить так легко исключению распространить к верхнему уровню, как игнорируют код возврата и позволяют программе segfault.
мне действительно нравится идея возвратить значение (перечисление?) для результатов и исключения для исключительного случая.
Попытка проверить, включает ли FieldInfo.Attributes
FieldAttributes.Literal
. Я не проверял, но звучит правильно ...
(Я не думаю, что вы можете получить только константы за один вызов GetFields
, но вы можете фильтровать результаты, возвращенные таким образом.)
type.GetFields(BindingFlags.Static | BindingFlags.Public).Where(f => f.IsLiteral);