我有一个实现IPermission
的课程:
public class MySecurityPermission : IPermission
{
private string[] _demandRoles;
private string[] _denyRoles;
public MySecurityPermission(string[] demandRoles, string[] denyRoles)
{
this._demandRoles = demandRoles;
this._denyRoles = denyRoles;
}
}
现在,IPermission接口需要一个Copy()
方法,我将其实现为:
public IPermission Copy()
{
return new MySecurityPermission(this._demandRoles.ToArray(), this._denyRoles.ToArray());
}
请注意,.ToArray()
调用是存在的,因为它会对数组进行关闭/复制,并返回一个新的数组实例,而不是传递相同的数组。
这导致FxCop CA2103:
“查看以下内容,了解可能存在的安全漏洞: 在'MySecurityPermission.Copy()'中,返回值 调用'Enumerable.ToArray(这个 IEnumerable)'被传递给'MySecurityPermission' 构造函数“。
有没有办法“修复”这个?我不确定为什么FxCop甚至会抱怨它。如果有人能够解释,那就太好了。
答案 0 :(得分:3)
由于代码执行的位置,似乎会引发规则。如果您首先创建变量,则规则将通过:
public IPermission Copy()
{
var demand = _demandRoles.ToArray();
var deny = _denyRoles.ToArray();
return new MySecurityPermission(demand, deny);
}