我相信 FXCop 在这里报告这个错误是因为它认为windowsIdentity
在调用基类构造函数时访问可能会遇到 NullReferenceException。
为 null 添加验证检查的一种方法是向您的类添加一个静态私有函数,该函数可以检查 WindowsIdentity 参数是否为 null 并采取适当的操作:
private static WindowsIdentity ValidateIdentity( WindowsIdentity identity )
{
if( identity == null )
throw new ArgumentNullException( "identity" );
// possibly some other validation checks here...
return identity;
}
public Identity(WindowsIdentity windowsIdentity)
: base( ValidateIdentity( windowsIdentity ).Token )
{
init();
}
另一种方法是使用三元运算符来验证参数,如下所示:
public Identity(WindowsIdentity windowsIdentity)
: base( windowsIdentity == null ? null : windowsIdentity.Token )
{
init();
}
但是,你真正应该问自己的是你会做什么?如果您只是要抛出一个异常,那么让代码保持原样可能是可以的,因为NullReferenceException
如果参数为空,它已经通过 a 。