为什么NullGuard.Fody不支持值类型

时间:2019-10-05 21:45:01

标签: c# .net fody

我目前正在维护一个具有数万个现有代码的旧项目。由于有很多代码可以很高兴地假设每个调用者都是行为良好的公民,而只是跳过对传递给它的任何数据的验证,因此我引入了Fody NullGuard,以防止我遵循这种传统编写/重构的任何新代码。由于此项目中的代码覆盖范围仍然很稀少,因此我不能在所有地方都使用隐式验证,因为在代码中可能会使用一些“合法的”空值。因此,相反,我仅将NullGuard属性应用于编写的新类,否则我可以验证的类不会受到负面影响。

我有一个结构,其构造函数将字符串作为参数:

public struct Foo {
  public Foo(decimal value, string tag) { ... }
}

我想使用Fody来提供针对null的保护措施。但是,当我尝试将NullGuard属性放在其顶部时,出现编译错误:

using NullGuard;

[NullGuard(ValidationFlags.AllPublicArguments)]
public struct Foo {
  public Foo(decimal value, string tag) { ... }
}
  

错误CS0592:此声明类型上的属性'NullGuard'无效。它仅对“汇编,类”声明有效。

NullGuard不支持值类型吗,还是只是不幸的遗漏(我想不太可能,因为它已经在6.0版中了)?

除了到处都可以进行手动检查之外,还有其他选择吗?

1 个答案:

答案 0 :(得分: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)]