Почему NullGuard.Fody не поддерживает типы значений - PullRequest
0 голосов
/ 06 октября 2019

В настоящее время я поддерживаю устаревший проект с десятками тысяч существующего кода. Поскольку существуют тонны кода, которые радостно предполагают, что каждый вызывающий абонент является гражданином с хорошим поведением и просто пропускает проверку любых переданных ему данных, я представляю 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)?

Есть ли альтернатива, кроме повсеместного размещения ручных проверок?

1 Ответ

0 голосов
/ 06 октября 2019

https://github.com/Fody/NullGuard

NullGuardAttribute NullGuardAttribute можно использовать на уровне класса или сборки. Требуется параметр ValidationFlags.

[assembly: NullGuard(ValidationFlags.None)] // Sets no guards at the assembly level

[NullGuard(ValidationFlags.AllPublicArguments)] // Sets the default guard for class Foo
public class Foo { ... }

Вы пытались добавить [assembly: NullGuard(ValidationFlags.None)]?

...