来自以下URL:https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters#enum-限制
它读取
枚举约束从C#7.3开始,您还可以指定System.Enum类型作为基类约束。CLR始终允许这个约束,但C#语言不允许它。使用System.Enum提供了类型安全编程以缓存使用System.Enum中的静态方法。以下示例查找枚举类型的有效值,然后构建映射的字典将这些值添加到其字符串表示中。
示例:
public static Dictionary<int, string> EnumNamedValues<T>() where T : System.Enum
{
var result = new Dictionary<int, string>();
var values = Enum.GetValues(typeof(T));
foreach (int item in values)
result.Add(item, Enum.GetName(typeof(T), item));
return result;
}
有没有任何方法可以将其约束为枚举,但也可以使用Integral数字类型?
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
示例
public static Dictionary<int, string> EnumNamedValues<T>() where T : System.Enum (uint)
{
var result = new Dictionary<int, string>();
var values = Enum.GetValues(typeof(T));
foreach (int item in values)
result.Add(item, Enum.GetName(typeof(T), item));
return result;
}
上面的语法"System.Enum(uint("不起作用(或者我当然不会问这个问题!(。。。。。。。但表明了我所要求的意图。
谢谢。
类似的内容?:
public enum Numbers
{
One = 1
, Two
, Three
}
...
...
public static Dictionary<int, string> EnumNamedValues<T>()
where T : unmanaged
{
var result = new Dictionary<int, string>();
var values = Enum.GetValues(typeof(T));
foreach (int item in values)
result.Add(item, Enum.GetName(typeof(T), item));
return result;
}
...
...
//valid:
var dictInt = EnumNamedValues<int>();
var dictByte = EnumNamedValues<System.SByte>();
var dictEnum = EnumNamedValues<Numbers>();
//not valid
var dictString = EnumNamedValues<string>();