通用可为空枚举

M A*_*ifi 3 c# generics enums nullable

我想要一个可以从可为空的数据库列解析枚举的方法。我在下面编写了这个方法(并且必须将 T 限制为结构才能使其编译)。

它确实可以编译,但我相信它是错误的,因为枚举不是结构?如果是这样,我如何限制泛型方法说我期待一个 ValueType 你不必向我抱怨“只有不可为空的值类型可以是 'System.Nullable' 的基础

private static T? ParseEnum<T>(DataRow row, string columnName)
    where T : struct
{
    T? value = null;
    try
    {
        if (row[columnName] != DBNull.Value)
        {
            value = (T)Enum.Parse(
                typeof(T),
                row[columnName].ToString(),
                true);
        }
    }

    catch (ArgumentException) { }

    return value;
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

不幸的是,C# 中没有可用的约束来限制给定类型是枚举。但在伊利诺伊州有这样的概念。乔恩在博客中谈到了这一点

  • 而且枚举实际上也是结构 (2认同)