gpt4 book ai didi

c# - 当枚举值与字符串值不匹配时处理来自 nHibernate EnumStringType 的异常

转载 作者:太空狗 更新时间:2023-10-29 23:15:15 25 4
gpt4 key购买 nike

她是我的情况,其中枚举值作为字符串存储在 Db 中。在检索时,我尝试使用基类为 EnumStringType 的 mytype 将字符串转换为枚举时出现异常。

这是我遇到的错误:

NHibernate.HibernateException : Can't Parse Enum4 as MyEnum

例如:来自数据库的值是:"Enum4"

根据 MyEnum 的代码,有效的枚举值是:

枚举1枚举2枚举3

在代码适应更改之前,Db 中以某种方式引入了 Enum4。 (我知道会发生疯狂的事情)

异常是正常的,因为我的 Enum 没有来自数据库的这个值。但我不希望用户出现异常。而是默认为第一个值。 (我同意这在某些情况下是不行的,但它可以防止在我的情况下更严重的异常)

如果我是正确的,GetInstance 是执行从字符串到枚举的转换的方法。是否有某种 TryGetXXXX 可以解决此问题或如何解决?

感谢您的宝贵时间!

这是我用来解决这个问题的枚举代码:

public class EnumMappingBase : EnumStringType
{
public EnumMappingBase(Type type)
:base(type)
{

}

public override object GetInstance(object code)
{
return base.GetInstance(code); // Here is where I get the exception.
// I am thinking this is where capturing the exception and defaulting must happen.
// I wish I had a TryGetInstance() here or may be it is there and I am not aware.
}

public override object GetValue(object code)
{
return base.GetValue(code);
}

}

public enum MyEnum
{
Enum1,
Enum2,
Enum3
}

public class MyEnumType : EnumMappingBase
{
public MyEnumType()
: base(typeof(MyEnum))
{

}
}

最佳答案

尝试如下覆盖 MyEnumType 中的 GetInstance():

public class MyEnumType : EnumMappingBase
{
public MyEnumType()
: base(typeof(MyEnum))
{}

public override object GetInstance(object code)
{
// Set the desired default value
MyEnum instanceValue = MyEnum.Enum1;
Enum.TryParse(code, true, out instanceValue);

return instanceValue;
}
}

关于c# - 当枚举值与字符串值不匹配时处理来自 nHibernate EnumStringType 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20694575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com