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

本文关键字:方法 是什么 参数 自定义属性 | 更新日期: 2023-09-27 18:18:21

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

我有以下代码:

    public sealed class MyCustomAttribute : System.Web.Http.Filters.AuthorizationFilterAttribute
    {
        private readonly string[] _someStrings;       
        public MyCustomAttribute(params string[] someStrings)
        {
            _someStrings = someStrings;
        }
    }

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

CA1019为属性参数定义访问器的位置参数'someStrings'的属性访问器属性"MyCustomAttribute"。

如果我用private set定义一个auto属性,我得到的警告是我应该返回集合而不是数组

CA1819属性不应该返回数组"MyCustomAttribute。SomeStrings'返回a收集或使它成为一个方法。

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

问题:如何实现这一点,而不需要抑制警告?

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

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