El uso de la palabra clave `in` provoca" E1012 La expresión constante viola los límites del subintervalo "en Delphi
compiler-errors delphi-2009 (1)
La documentación sobre Sets
dice:
El tipo base no puede tener más de 256 valores posibles, y sus ordinalidades deben estar entre 0 y 255.
Entonces, incluso si puede tener enumeraciones de cualquier valor, la instrucción if xx in [a,b,c]
fallará aquí, ya que un conjunto no puede contener un valor mayor que 255.
Use una declaración de caso en su lugar:
case xx of
a,b,c : // Make something
end;
Me he encontrado con un comportamiento bastante inusual en un poco de código Delphi. Cuando uso la palabra clave in
para verificar si un elemento está en una matriz constante, obtengo el siguiente error de compilación:
E1012 La expresión constante viola los límites del subintervalo
Las constantes se definen de la siguiente manera:
type TSomeEnum = (seFoo = 1000,
seBar = 2000,
seBoo = 3000,
seFar = 4000,
seFooBar = 5000,
seBooFar = 6000,
seLow = 1000,
seHigh = 6000,
seCount = 6);
La línea que está fallando es la siguiente:
if someObj.someProperty in [seFoo, seFar, seFooBar] then
...
Aunque entiendo el razonamiento detrás del error que se muestra en otra pregunta publicada aquí , donde los límites que revisan las matrices de enteros no se hicieron en tiempo de compilación cuando se usa una variable, parece extraño que tenga el mismo problema con una matriz constante que es sin duda dentro de los límites.
Por ahora, he reemplazado la línea con una declaración (mucho más grande) que comprende or
cláusulas. Sin embargo, esto claramente no es ideal. ¿Alguien puede arrojar alguna luz sobre por qué estoy recibiendo este problema?