好吧,无论出于何种原因,我似乎无法解决这个小问题。
我有以下枚举:
public enum EFeedType
{
TypeOne = 1,
TypeTwo = 2
}
现在,我将从数据库中获取数值。好吧,我需要将DB中的int值转换为枚举类型:
修改 数据库类型是整数,所以我不需要从字符串转换。 结束编辑
EFeedType feedType = (EFeedType) feedId;
但是,当我执行此操作并传入值2时,我收到以下错误:
实例验证错误:'2'不是[Namespace Goes Here]的有效值.EFeedType。
对我可能做错了什么或错过什么的想法?
修改 这是我正在使用的代码:
//GetFeed will return an int value which is pulled from the database
int feedId = new FeedEngine().GetFeed("FeedName");
//Convert the ID to the Enum
EFeedType feedType = (EFeedType) feedId;
//Set the User Control FeedType Enum to the enum
FeedControl.FeedType = feedType;
//Show the user control
FeedControl.Visible = true;
编辑 - 更多信息
好的,在看到JSkeet的响应之后,我看到如果我的feedId = 1那么它会将枚举值设置为TypeTwo而不是TypeOne。也许我需要在我的枚举中使用Default = 0值才能使用它?但必须有更好的方法,因为如果我的价值观不是按顺序排列的话。
答案 0 :(得分:2)
您的错误不会来自您显示的行。我强烈怀疑它来自这条线:
FeedControl.FeedType = feedType;
我的猜测是该属性正在进行一些验证 - 并且它不知道相关值。
编辑:请注意,如果您执行想要查明某个值是否有效,请使用Enum.IsDefined
。 Enum.Parse
不会为不正确的数值抛出异常,只要它在正确的范围内。
你真的发布了枚举的确切代码吗?因为如果它没有明确指定“= 1”和“= 2”,它将从0自动递增,这将是你的问题。
如果你能用一个简短但完整的程序展示所有这些,那真的会有所帮助。无需转到数据库,也无需对用户控件执行任何操作。
答案 1 :(得分:0)
我只是尝试了以下内容并且完美无缺。您可能希望将代码分解为一个小测试项目以查看正在发生的事情。
// enum definition
public enum EFeedType {
TypeOne = 1,
TypeTwo = 2,
}
// usage
private void TestEnum() {
Int32 feedId = 2;
EFeedType stuff = (EFeedType)Enum.Parse(typeof(EFeedType), feedId.ToString());
Response.Write(stuff.ToString());
}