You need to enable JavaScript to run this app. C# 如何将数据库来源的字符串属性值赋值给自定义枚举类型
优惠活动
大模型
产品
解决方案
定价
更多

C# 如何将数据库来源的字符串属性值赋值给自定义枚举类型

字符串属性转换为对应枚举类型的实现方法

针对你定义的DiamDivide枚举类型、以及从数据库取值的CalcMethodName字符串属性,可以通过以下方式完成正确的枚举赋值,生产环境建议使用带容错的实现方案,避免数据库脏数据导致程序崩溃。

可用的转换方式

  • 基础硬转换:使用Enum.Parse静态方法完成类型转换
    示例代码:
    DiamDivide targetEnum = (DiamDivide)Enum.Parse(typeof(DiamDivide), CalcMethodName);
    
    注意:该方法在传入空值、无匹配内容的字符串时会直接抛出运行时异常,不适合直接对接数据库取值的场景。
  • 无异常容错转换(推荐):使用Enum.TryParse静态方法完成转换
    该方法不会主动抛出运行时异常,会通过返回值告知转换是否成功,还可以配置是否忽略大小写匹配,适配数据库存储值大小写不统一的场景。
    示例代码:
    DiamDivide targetEnum;
    // 第二个参数设为true表示匹配时忽略大小写
    bool parseSuccess = Enum.TryParse<DiamDivide>(
        value: CalcMethodName,
        ignoreCase: true,
        result: out targetEnum
    );
    

生产环境兜底校验

即使使用TryParse方法,也需要补充一层枚举合法性校验,避免传入纯数字字符串(比如"1")时,被自动映射为对应枚举序号值的非预期情况:

// 校验解析出的值是否是DiamDivide枚举中明确定义的成员
bool isLegal = Enum.IsDefined(typeof(DiamDivide), targetEnum);

完整可落地的示例代码

DiamDivide diamDivideValue;
// 处理空值场景
if (string.IsNullOrWhiteSpace(CalcMethodName))
{
    // 按业务规则设置默认值,例如默认赋值为DiamDivide.Absolute
    diamDivideValue = DiamDivide.Absolute;
}
else
{
    // 尝试解析字符串,同时校验值合法性
    if (Enum.TryParse<DiamDivide>(CalcMethodName, true, out var parsedValue)
        && Enum.IsDefined(typeof(DiamDivide), parsedValue))
    {
        diamDivideValue = parsedValue;
    }
    else
    {
        // 遇到不匹配的脏数据时,可根据业务逻辑选择记日志、走默认值、抛出业务自定义异常
        diamDivideValue = DiamDivide.Absolute;
    }
}

注意:如果业务要求枚举值必须和字符串完全大小写匹配,只需要将TryParse方法中的ignoreCase参数设置为false即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 07:15:02