c# - 通用可空枚举

标签 c# generics enums nullable

<分区>

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

它确实可以编译,但我认为它是错误的,因为枚举不是结构? 如果是这样,我如何限制泛型方法说我期待一个 ValueType 你不必向我提示“只有不可为 null 的值类型可以是 '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;
}

最佳答案

不幸的是,C# 中没有可用的约束,允许您将给定类型限制为枚举。在 IL 中有这样的概念。乔恩 blogged about it .

关于c# - 通用可空枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719258/

相关文章:

c# - MaskedEditValidator 在使用 "en-GB"文化时导致 Page.IsValid 为假

c# - Application.Run(窗体)挂起

c# - Enumerable.Contains 与 MethodInfo

Java 泛型 : Is there a better solution than Vector2D, Vector3D、Vector4D 等?

java - 消除未经检查的警告: cast String to T

c# - 存储可以循环编辑的列表?

C# 枚举和重复值 - 危险?

c# - 什么 API 可用于读取 OAB 文件?

generics - 处理Array <T>或IntArray的函数

c - 如何仅迭代直接在普通 c 中设置枚举值?