有没有办法在自定义System.Security.IPermission实现上修复此FxCop CA2103警告?

时间:2012-01-23 18:51:46

标签: c# .net fxcop

我有一个实现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甚至会抱怨它。如果有人能够解释,那就太好了。

1 个答案:

答案 0 :(得分:3)

由于代码执行的位置,似乎会引发规则。如果您首先创建变量,则规则将通过:

public IPermission Copy()
{
    var demand = _demandRoles.ToArray();
    var deny = _denyRoles.ToArray();
    return new MySecurityPermission(demand, deny);
}