如何解决ReSharper 警告:“泛型类型的静态字段”
在泛型类型中有一个静态字段很好,只要您知道每个类型参数组合都会真正获得一个字段。我的猜测是,R# 只是在警告你,以防你不知道。
这是一个例子:
using System;
public class Generic<T>
{
// Of course we wouldn't normally have public fields, but...
public static int Foo;
}
public class Test
{
public static void Main()
{
Generic<string>.Foo = 20;
Generic<object>.Foo = 10;
Console.WriteLine(Generic<string>.Foo); // 20
}
}
正如你所看到的,Generic<string>.Foo
是一个不同的字段Generic<object>.Foo
——它们持有不同的值。
解决方法
public class EnumRouteConstraint<T> : IRouteConstraint
where T : struct
{
private static readonly Lazy<HashSet<string>> _enumNames; // <--
static EnumRouteConstraint()
{
if (!typeof(T).IsEnum)
{
throw new ArgumentException(
Resources.Error.EnumRouteConstraint.FormatWith(typeof(T).FullName));
}
string[] names = Enum.GetNames(typeof(T));
_enumNames = new Lazy<HashSet<string>>(() => new HashSet<string>
(
names.Select(name => name),StringComparer.InvariantCultureIgnoreCase
));
}
public bool Match(HttpContextBase httpContext,Route route,string parameterName,RouteValueDictionary values,RouteDirection routeDirection)
{
bool match = _enumNames.Value.Contains(values[parameterName].ToString());
return match;
}
}
这是错的吗?我会假设这实际上对于我碰巧遇到static readonly
的每个可能都有一个字段。EnumRouteConstraint<T>