14

少しのDelphiコードでかなり変わった振る舞いに出くわしました。キーワードを使用してinアイテムが定数配列にあるかどうかを確認すると、次のコンパイルエラーが発生します。

E1012定数式がサブレンジ境界に違反しています

定数は次のように定義されます。

type TSomeEnum = (seFoo = 1000,
                  seBar = 2000,
                  seBoo = 3000,
                  seFar = 4000,
                  seFooBar = 5000,
                  seBooFar = 6000,
                  seLow = 1000,
                  seHigh = 6000,
                  seCount = 6);

失敗している行は次のとおりです。

if someObj.someProperty in [seFoo, seFar, seFooBar] then
...

ここに投稿された別の質問に示されているエラーの背後にある理由は理解していますが、変数を使用するとコンパイル時に整数配列の境界チェックが行われなかったのですが、定数配列で同じ問題が発生するのは奇妙に思えます。最も確実に範囲内です。

今のところ、この行をor句で構成される(はるかに大きな)ステートメントに置き換えました。ただし、これは明らかに理想的ではありません。なぜ私がこの問題を抱えているのか、誰かが何か光を当てることができますか?

4

1 に答える 1

24

についてのドキュメントSets

基本タイプは256を超える可能な値を持つことはできず、それらの順序は0から255の間でなければなりません。

したがって、任意の値の列挙型を持つことができる場合でもif xx in [a,b,c]、セットは255より大きい値を保持できないため、ステートメントはここで失敗します。

代わりにcaseステートメントを使用してください。

case xx of
  a,b,c : // Make something 

end;
于 2012-08-29T16:30:45.100 に答える