gpt4 book ai didi

c# - ReSharper 警告 : "Static field in generic type"

转载 作者:IT王子 更新时间:2023-10-29 03:28:56 28 4
gpt4 key购买 nike

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>我碰巧的例子。

最佳答案

在泛型类型中有一个静态字段很好,只要您知道每个类型参数组合确实会得到一个字段。我的猜测是 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>.FooGeneric<object>.Foo 是不同的字段- 它们具有不同的值。

关于c# - ReSharper 警告 : "Static field in generic type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647641/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com