我有一个 enum 就像这样。
public enum TimeFrame
{
Morning = 1,
Afternoon,
Evening
}
当存储包含 TimeFrame 类型属性的对象时,使用开关语句进行转换,使每个值显式为1,2和3 。创建的命令字符串替换为例如晚上到3.从数据库中提取时相同 - 如果值为1,则将其手动并明确地映射到 Morning 。< / p>
是否有一种平滑的方式来存储枚举&#34;的值&#34;?或者我们应该出于某种原因避免这样做吗?
我尝试过直接的做法,但这只会给出回落价值......
TimeFrame = row["TimeFrame"] as TimeFrame? ?? TimeFrame.Morning
答案 0 :(得分:2)
您可以将枚举转换为整数,反之亦然,这非常快。您还可以在枚举和字符串之间进行转换,需要更多代码,时间和存储空间。然后,您可以在数据库中轻松存储整数或字符串。
答案 1 :(得分:2)
如果由于某种原因,O / R映射器(或您正在使用的任何技术)无法处理枚举值,您可以创建一个int
属性来翻译您的枚举:
// Do not map!
public TimeFrame TimeFrame { get; set; }
// Map!
public int TimeFrameInt {
get { return (int)TimeFrame; }
set { TimeFrame = (TimeFrame)value; }
}
ints和enums之间的转换只需使用强制转换;不需要切换语句。这是可能的,而且速度非常快,因为枚举是由引擎盖下的整体表示的。