我已经看到 C# 中用于枚举的通用扩展方法的示例where T: struct
,还有另一个使用where T: IComparable
. 例如,在前一种情况下:
public static class EnumExtensionMethods
{
public static string Description<T>(this T enumValue) where T : struct
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么约束要求该类型T
必须是struct
. 我希望它是where T : Enum
。谁可以给我解释一下这个?作为奖励项目,也许还可以解释为什么IComparable
在某些示例中也使用。
FWIW,我对此进行了研究。我可以找到关于为什么IComparable
使用的解释,例如在这个问题中,但它似乎不是决定性的,它们也没有解释为什么struct
结合使用。
Jon*_*eet 18
我怀疑您正在查看一些在 C# 7.3 之前编写的代码 - 使用Enum
或Delegate
仅在 C# 7.3 中引入的限制泛型类型参数的能力。
但对于扩展方法针对枚举,你会希望既 Enum
和struct
在约束,如
public static string GetDescription<T>(this T enumValue) where T : struct, Enum
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
这样它只能在具体的枚举类型上调用,而不是GetDescription<Enum>(null)
.