枚举赋值解析c#

时间:2010-01-21 14:21:55

标签: c# enums

好吧,无论出于何种原因,我似乎无法解决这个小问题。

我有以下枚举:

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值才能使用它?但必须有更好的方法,因为如果我的价值观不是按顺序排列的话。

2 个答案:

答案 0 :(得分:2)

您的错误不会来自您显示的行。我强烈怀疑它来自这条线:

FeedControl.FeedType = feedType;

我的猜测是该属性正在进行一些验证 - 并且它不知道相关值。

编辑:请注意,如果您执行想要查明某个值是否有效,请使用Enum.IsDefinedEnum.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());
        }