0

我目前正在维护一个包含数万个现有代码的遗留项目。由于有大量代码愉快地假设每个调用者都是行为良好的公民并且只是跳过验证传递给它的任何数据,因此我引入了 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”在此声明类型上无效。它仅对“程序集,类”声明有效。

NullGuard 不支持值类型是否有任何原因,或者它只是一个不幸的遗漏(我认为不太可能,因为它已经在 6.0 版中)?

除了到处手动检查之外,还有其他选择吗?

4

1 回答 1

0

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)]吗?

于 2019-10-05T22:05:24.370 回答