C# 转换枚举 InvalidCastException 错误

Posted

技术标签:

【中文标题】C# 转换枚举 InvalidCastException 错误【英文标题】:C# Cast a enum InvalidCastException error 【发布时间】:2016-02-24 07:46:04 【问题描述】:

所以我有这个使用 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 错误,我不知道为什么,我在这里搜索并用谷歌搜索,但找不到任何关于这样的演员表的信息。

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

【问题讨论】:

数据库中记录的数据类型是什么? 我把它作为一个整数放入数据库中, 尝试使用声明为 var temp 的临时变量从数据库读取返回值,然后使用调试器检查从数据库返回的值是什么,然后再尝试任何强制转换。 谢谢,Tho Racil Hilan 他的回答成功了。 【参考方案1】:

您是否尝试过先转换为 int?

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

【讨论】:

我刚试过,但我害怕它会抛出同样的错误【参考方案2】:

试试这个:

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

这是fiddle。

【讨论】:

【参考方案3】:

我的猜测是您的 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。

【讨论】:

【参考方案4】:

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

我的猜测是drAnimal["feedschedule_type"] 被存储为SqlDbType.Intobject。为了转换我的参数,我必须执行类似于以下的操作:

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

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

【讨论】:

是的,你是对的。但是,将 db 字段转换为整数的最佳方法是在字段不可为空时使用 Convert.ToInt32(drAnimal["feedschedule_type"])。如果可以为空,那么最好使用drAnimal["feedschedule_type"] as int? 可能,但如果类型在技术上是 SqlDbType.VariantConvert 会惨遭失败,因此是初始演员表。

以上是关于C# 转换枚举 InvalidCastException 错误的主要内容,如果未能解决你的问题,请参考以下文章

C# 给枚举定义DescriptionAttribute,把枚举转换为键值对

C# 转换枚举 InvalidCastException 错误

C# Enum,Int,String的互相转换 枚举转换

C# Enum,Int,String的互相转换 枚举转换

c#下可否将一个枚举类型的数组转换为一个整型数组

在 C# 中将 Int 转换为通用枚举