在自定义属性中接受多个参数的正确方法是什么

时间:2013-06-14 15:52:52

标签: c# code-analysis custom-attributes params

我在VS2012中使用MVC4 Web应用程序中的.NET 4.5。我正在尝试构建一个接受未知数量参数的自定义属性。

我有以下代码:

    public sealed class MyCustomAttribute : System.Web.Http.Filters.AuthorizationFilterAttribute
    {
        private readonly string[] _someStrings;       

        public MyCustomAttribute(params string[] someStrings)
        {
            _someStrings = someStrings;
        }
    }

我自然得到以下代码分析警告:

  

CA1019定义属性参数的访问器添加公共只读   位置参数'someStrings'的属性访问器   属性   'MyCustomAttribute'。

如果我使用私有集定义一个auto属性,我会收到警告,我应该返回集合而不是数组

  

CA1819属性不应返回数组更改   'MyCustomAttribute.SomeStrings'返回一个   收集或使它成为一个   方法

问题在于我不想暴露数组,因为我不希望任何人改变数组中的内容。至多,我想返回一个ReadOnlyCollection。如果我将属性的类型更改为'ReadOnlyCollection',我会再次收到第一个警告,因为它匹配参数名称(不区分大小写)和类型的属性。

问题:如何在不需要取消警告的情况下实现这一目标?

1 个答案:

答案 0 :(得分:1)

这是一个API可用性规则,如果没有理由通过属性公开值,您可以自由地抑制警告。如果您确实要公开该值,则ReadOnlyCollection类型的属性将充分满足规则的意图,即使规则代码无法识别它。