私は現在、VB6/COMプロジェクトでビットフラグ列挙型を使用しようとしています。ただし、列挙型から値を読み取ろうとすると、一貫性のない結果が得られます。
列挙型の定義は次のとおりです。
Enum Fruits
None = 0
Apple = 1
Strawberry = 2
Lemon = 4
End Enum
Fruitsタイプのプロパティを公開するオブジェクトがあります
Public Get AvailableFruits as Fruits
値を読み取ることができるはずのコードは、列挙型の各ビットの値に応じてラベルを表示/非表示にするために使用されます。
lblAppleAvailable.Visible = basket.AvailableFruits And Fruits.Apple
このコードが実行され、私が持っているbasket.AvailableFruits = 0場合、結果としてTrueを取得します。
何がこの振る舞いを引き起こす可能性があるかについての考えはありますか?
編集 :
私は列挙型のさまざまな値で試しました:
basket.AvailableFruits = 0
basket.AvailableFruits And Apple // Returns True
basket.AvailableFruits And Strawberry // Returns True
basket.AvailableFruits And Lemon // Returns False
サイドノードとして、コードをデバッグするときに、式を監視式に入れると、正しい値が得られます。しかし、式が私のコードで評価されるとき、それはまだTrueを返します。
別のチェック構文を使用してみました:
(basket.AvailableFruits And Fruits.Apple) = Fruits.Apple
まだTrueになるbasket.AvailableFruits = 0:-(
解決
さまざまなソリューションをテストした後、問題をCOMコンポーネントに絞り込むことができました。このコンポーネントの元のコーダーでは、値として0を返すのではなく、ポインターが0に設定されていたため、値を読み取ろうとしたときに問題が発生していました。
コードの可読性を向上させるための良いヒントと思われるヘルパー関数のために、FlipScriptの回答を選択しました。