У нас есть несколько достаточно сложных атрибутов в нашем проекте, поэтому мы включаем проверку входных данных. Например, как часть нашей работы с I18N и L10N, у нас есть атрибуты, которые выполняют поиск ресурсов (во многом аналогично атрибутам в структуре, которые используются для локализации строк Category и Description для свойств в конструкторах). Эти пользовательские атрибуты должны иметь некоторую проверку, чтобы они могли работать.
Простые атрибуты, которые у нас есть, не используют проверку, потому что мы предпочли бы сбой потребляющего кода, указывающего местоположение ошибки.
Итак, в заключение, это действительно зависит от сложности атрибута; если он создается с одним видом данных, но ожидается, что он предоставит другой (например, при поиске ресурсов), он должен содержать проверку, в противном случае, вероятно, не должен.