C#抛出枚举InvalidCastException错误

时间:2015-11-22 00:00:35

标签: c# .net sqlite casting enums

所以我有这个使用Firebird的旧代码,我从那里获取代码,因为它工作得很好,但在这里它没有。并抛出一个InvalidCastException。

所以,我正在尝试

animal.FeedScheduleType = (BcFeedScheduleType)drAnimal["feedschedule_type"];

所以我尝试从我的数据表中取出一些东西并将其放在animal.FeedScheduleType中。现在我的演员点了一个公开的枚举

    public enum BcFeedScheduleType
{
    Default = 0,
    FromList = 1,
    Group = 2
}

和animal.FeedScheduleType是

private BcFeedScheduleType _feedScheduleType;

public BcFeedScheduleType FeedScheduleType
    {
        get { return _feedScheduleType; }
        set { _feedScheduleType = value; }
    }

但无论什么时候它都会打它,它会抛出InvalidCastException错误,我不知道为什么,我在这里搜索谷歌,但无法找到任何关于这样的演员。

编辑:数据库中的Type是一个整数

4 个答案:

答案 0 :(得分:2)

试试这个:

def return_anagrams(word_list):
    d = {}
    out = set()
    for word in word_list:
        s = ''.join(sorted(word))
        try:
            out.add(d[s])
            out.add(word)
        except:
            d[s] = word
    return out

这是fiddle

答案 1 :(得分:1)

你有没有尝试过转换为int?

animal.FeedScheduleType = (BcFeedScheduleType)(int)drAnimal["feedschedule_type"];

答案 2 :(得分:0)

我的猜测是你的drAnimal返回一个字符串而不是int。如果是这种情况,那么

animal.FeedScheduleType = (BcFeedScheduleType)Int.Parse(drAnimal["feedschedule_type"]);

如果您不确定drAnimal是什么类型,您可以执行以下操作:

var feedschedule_type = drAnimal["feedschedule_type"]; Console.WriteLine("feedschedule_type is {0}", typeof(feedschedule_type));

基本上,你需要将它变成一个int,然后在你的问题中使用标准演员。

最后,确保Feed计划类型具有有效值。即,确保其值为0,1或2。

答案 3 :(得分:0)

我最近在使用SqlParameter时遇到了这个问题。

我的猜测是drAnimal["feedschedule_type"]被存储为SqlDbType.Intobject。为了投射我的参数,我必须做类似以下的事情:

(int)(SqlDbType.Int)(drAnimal["feedschedule_type"]);

您可能必须使用类似的链来获取实际的int值并将其强制转换为Enum。