0

我在 C# WPF 应用程序中遇到的 InvalidCastException 是如何发生的?

我尝试从“cacheConsumptionStatus = ConsumptionStatusType.GetByKey(Convert.ToInt32(value));”更改应该有问题的行 到“cacheConsumptionStatus = (ConsumptionStatusType.)value;”,结果是一样的。

结果甚至与完全注释掉的那行相同。

“cache”是 BitArray 类型,“hasValue”是 bool,“value”是 object。

相关代码:

消息.cs

...
switch(propID)
{
...
case 968:
    cache[9] = hasValue;

    if (hasValue)
        {    <-- InvalidCastException -- Unable to cast object of type 'System.Int32' to type 'Enumerations.ConsumptionStatusType'.
            cacheConsumptionStatus = ConsumptionStatusType.GetByKey(Convert.ToInt32(value));
        }

        videoManagerRef.events.FireOnMessageConsumptionStatus(this, cacheConsumptionStatus);
        break;
...

消费状态类型.cs

using System.Collections.ObjectModel;

namespace Enumerations
{
    public class ConsumptionStatusType : EnumBase<ConsumptionStatusType>
    {
        public static readonly ConsumptionStatusType CONSUMED = new ConsumptionStatusType(0, "CONSUMED");
        public static readonly ConsumptionStatusType UNCONSUMED_SUPPRESSED = new ConsumptionStatusType(1, "UNCONSUMED_SUPPRESSED");
        public static readonly ConsumptionStatusType UNCONSUMED_NORMAL = new ConsumptionStatusType(2, "UNCONSUMED_NORMAL");
        public static readonly ConsumptionStatusType UNCONSUMED_ELEVATED = new ConsumptionStatusType(3, "UNCONSUMED_ELEVATED");

        public ConsumptionStatusType(int key, string value)
        : base(key, value)
        {
        }

        public static ReadOnlyCollection<ConsumptionStatusType> GetValues()
        {
            return GetBaseValues();
        }

        public static ConsumptionStatusType GetByKey(int key)
        {
            return GetBaseByKey(key);
        }
    }
}
4

2 回答 2

0

你还没有展示你EnumBase课堂上的内容,但我怀疑GetBaseByKey在某些时候你正在尝试做与(ConsumptionStatusType)value你直接尝试相同的演员。像这样的强制转换适用于普通的enum,但是你在这里拥有ConsumptionStatusType的是一个试图表现得像一个enum但不提供任何类型转换的类Int32。从这里显示的内容来看,您最好只制作ConsumptionStatusType一个真实的enum而不是使用EnumBase该类,这似乎没有做任何枚举上不可用的事情。

于 2012-07-12T19:26:41.503 回答
0

这个问题是一个参考问题,而不是代码问题:我正在处理调试引用的库,而项目正在引用发布 .dll,这就是为什么我在调试 .dll 中进行的更改并不重要。

于 2012-07-18T13:03:37.887 回答