【问题标题】:cast integer to generic enum types that have a different underlying type将整数转换为具有不同基础类型的通用枚举类型
【发布时间】: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&lt;T&gt;(i.ToString())
  • @MathiasR.Jessen 当然,我仍然不知道为什么 OP 不能使用简单的演员表,这对我来说毫无意义。

标签: c# generics enums casting


【解决方案1】:

你可以这样做,例如:

public static T Cast<T>(int i) where T : Enum {
    return (T)Convert.ChangeType(i, Enum.GetUnderlyingType(typeof(T)));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2022-01-07
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多