You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将泛型枚举类型传入Enum.Parse()并解决CS0453错误?

问题描述

我定义了一个泛型record类:

public record OperationCollectionGeneric<OPERATIONTYPE> where OPERATIONTYPE: notnull, Enum
{
    public OPERATIONTYPE Group { get; }

    public OperationCollectionGeneric(string part1, string? part2 = null, string? part3 = null)
    {
        Group = Enum.Parse<OPERATIONTYPE>(part1, true);
    }
}

调用Enum.Parse()方法时出现以下错误:

Error CS0453 The type 'OPERATIONTYPE' must be a non-nullable value type in order to use it as parameter 'TEnum' in the generic type or method 'Enum.Parse(ReadOnlySpan, bool)'

我希望确保OPERATIONTYPE参数为Enum类型,已尝试用where关键字设置枚举约束但无效,该如何处理?

解决方案

问题出在泛型约束的定义上:Enum.Parse<TEnum>的泛型参数TEnum要求必须是非空的值类型枚举。你当前的notnull, Enum约束虽然排除了null引用类型,但没明确限定是值类型——C# 8.0及以后,可为空的枚举类型(比如SomeEnum?)也满足notnull, Enum约束,但它属于可空值类型,不符合Enum.Parse的参数要求。

只需把泛型约束改成struct, Enum即可:

public record OperationCollectionGeneric<OPERATIONTYPE> where OPERATIONTYPE : struct, Enum
{
    public OPERATIONTYPE Group { get; }

    public OperationCollectionGeneric(string part1, string? part2 = null, string? part3 = null)
    {
        Group = Enum.Parse<OPERATIONTYPE>(part1, true);
    }
}

struct约束确保OPERATIONTYPE是值类型,结合Enum约束,就能严格限定它是非空的枚举值类型,完全匹配Enum.Parse<TEnum>的参数要求。

内容的提问来源于stack exchange,提问作者Azarakhsh Hamedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:50:37