0

C# WPF アプリケーションで発生している InvalidCastException はどのように発生していますか?

問題のある行を「cacheConsumptionStatus = ConsumptionStatusType.GetByKey(Convert.ToInt32(value));」から変更しようとしました。「cacheConsumptionStatus = (ConsumptionStatusType.)value;」に、結果は同じです。

その行を完全にコメントアウトしても結果は同じです。

「cache」は BitArray 型、「hasValue」は bool、「value」はオブジェクトです。

関連コード:

Message.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;
...

ConsumptionStatusType.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クラスです。ここに示されていることから、列挙型で利用できないことは何もしていないように見えるクラスを使用するよりも、単に実数を作成することでより適切にサービスを提供できます。enumInt32ConsumptionStatusTypeenumEnumBase

于 2012-07-12T19:26:41.503 に答える
0

この問題は参照の問題であり、コードの問題ではありませんでした: プロジェクトがリリース .dll を参照している間、私はデバッグ参照ライブラリに取り組んでいました。

于 2012-07-18T13:03:37.887 に答える