我在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',我会再次收到第一个警告,因为它匹配参数名称(不区分大小写)和类型的属性。
问题:如何在不需要取消警告的情况下实现这一目标?
答案 0 :(得分:1)
这是一个API可用性规则,如果没有理由通过属性公开值,您可以自由地抑制警告。如果您确实要公开该值,则ReadOnlyCollection类型的属性将充分满足规则的意图,即使规则代码无法识别它。