【发布时间】:2013-01-04 04:13:59
【问题描述】:
我可以使用以下代码将enum 转换为string。但是,它只存储一个选定的值。在选择了两个值的情况下,当我使用 NHibernate 存储它时,它会被截断。
这是我的代码:
MyEnum { One, Two, Three, Four, Five }
private static readonly string[] myEnum =
Enum.GetNames(typeof(MyEnum));
public string MyProperty
{
get {
var value = new MyEnum();
int i = (int)value;
return i >= 0 && i < myEnum.Length ?
myEnum[i] : i.ToString(); }
set {
Record.MyProperty= value ==
null ? null : String.Join(",", value); }
}
Record 只是public virtual string MyProperty { get; set; }
谁能提供我将如何存储的示例,例如以逗号分隔的形式,选择多个enum(例如,“一、二、五”由用户选择,所有三个都是存储在数据库中)?
更新:
我正在尝试在get{} 中执行此操作:
foreach (int i in Enum.GetValues(typeof(MyEnum)))
{
return i >= 0 && i < myEnum.Length ? myEnum[i] : i.ToString();
}
但我收到not all code paths return a value 错误。
问题更新:
如果我用两个 string 这样做:
part.MyProperty = record.MyProperty;
使用@Jamie Ide 下面的IEnumerable<MyEnum> 答案将不起作用,因为我无法将string 转换为MyEnum。
我将如何编写最后一部分以从以下答案中的@Jamie Ide 获取IEnumerable<MyEnum> 代码?
【问题讨论】:
-
@frictionlesspulley 您能否在答案中汇总一个示例,然后我可以检查它是否有效?谢谢!
-
您显示的 MyProperty 在其设置器中接受单个字符串并对其执行 string.Join ,这看起来“出乎意料”。你所拥有的一切都需要并返回字符串 - 你为什么不更多地暴露 MyEnum ?为什么是 myEnum?它包含与 someEnum.ToString() 给你的相同的值。为什么不将其存储为 ISet
? -
not all code paths return a value错误的原因是因为如果您的枚举中没有值(即循环永远不会运行),则不会返回任何内容。您可以在末尾添加一个虚拟的return ""以使编译器满意。 -
是否需要存储为字符串?您是否考虑过存储为
int或long并将[Flags]属性添加到枚举,然后进行按位比较以获得枚举列表? -
@Josh 我尝试了一些类似的方法,但无法使其正常工作。