В настоящее время я поддерживаю устаревший проект с десятками тысяч существующего кода. Поскольку существуют тонны кода, которые радостно предполагают, что каждый вызывающий абонент является гражданином с хорошим поведением и просто пропускает проверку любых переданных ему данных, я представляю Fody NullGuard, чтобы любой новый код, который я пишу / реорганизую, не следовал этой традиции. Поскольку охват кода в этом проекте все еще недостаточен, я не могу везде использовать неявную валидацию, потому что в коде могут быть некоторые «эээ», «законные» использования нулей. Поэтому вместо этого я применяю атрибут NullGuard только к новым классам, которые я пишу, или те, которые я могу проверить, не будут затронуты отрицательно.
У меня есть структура, конструктор которой принимает строку в качестве параметра:
public struct Foo {
public Foo(decimal value, string tag) { ... }
}
Я бы хотел использовать Fody для обеспечения защиты от нулей. Однако, когда я пытаюсь поместить атрибут NullGuard поверх него, я получаю ошибку компиляции:
using NullGuard;
[NullGuard(ValidationFlags.AllPublicArguments)]
public struct Foo {
public Foo(decimal value, string tag) { ... }
}
ошибка CS0592: Атрибут 'NullGuard' недопустим для этого типа объявления. Он действителен только для объявлений 'Assembly, Class'.
Есть ли какая-либо причина, по которой типы значений не поддерживаются NullGuard, или это просто неудачное упущение (вряд ли, я думаю, поскольку оно уже вверсия 6.0)?
Есть ли альтернатива, кроме повсеместного размещения ручных проверок?