【发布时间】:2021-09-28 15:25:31
【问题描述】:
只有当参数类型与T的底层类型相同时,下面的函数才有效。我怎样才能使它适用于所有枚举? (我不在乎变窄或变宽)
public T Cast<T>(int i) where T : Enum
{
return (T)(object)i;
}
【问题讨论】:
-
为什么还需要这个功能?它只是使您的代码比直接转换更不可读且效率更低,例如
var enumValue = (MyEnum)someInt -
大卫所说的,但是:我能想象的唯一优势是您可以包含range check。
-
@DavidG 我不需要这个功能。这只是问题的简化。我希望我可以直接在我的代码中进行转换,但我不能。
-
@MathiasR.Jessen 因为这要求
i是一个字符串?另外,我更喜欢这里的通用版本,所以Enum.Parse<T>(i.ToString()) -
@MathiasR.Jessen 当然,我仍然不知道为什么 OP 不能使用简单的演员表,这对我来说毫无意义。