如何将Generic约束为Enum和Integral数字类型



来自以下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>();

相关内容

  • 没有找到相关文章

最新更新