Se eu tiver um tipo Enum como este:
TOAuthSubjectTypes = (
[MappingAttr('public')]
ostPublic,
[MappingAttr('pairwise')]
ostPairwise
);
E em um dado momento eu tenho uma variável que contém ostPairwise
, é possível recuperar o atributo para o valor ostPairwise
? No momento, a solução alternativa que estou aplicando é definir todos os atributos em ordem para o tipo Enum e alcançá-los por meio GetAttributes
do valor Ordinal do tipo enum, mas eu me pergunto se há uma maneira mais idiomática.
Desculpe se estiver duplicado. Encontrei muitas respostas nas tags de idiomas de outros, mas nada relacionado nas do Delphi.
Infelizmente, não há como fazer o que você quer, pois não há RTTI armazenado para membros de enumeração individuais, apenas para o tipo de enumeração em si.
De acordo com esta resposta ao Delphi 2010 RTTI: Explore Enumerations (que ainda é válido para o Delphi 12):
Então, sua solução alternativa para colocar os atributos no tipo enum e então indexá-los pelo valor enum é a melhor que você pode fazer.
Seguindo a resposta de Remy, parece não ser possível acessar Atributos de membros específicos. A maneira como consegui um resultado semelhante foi definindo um atributo como:
E duas funções genéricas, declaradas como
E implementado como
Elas foram escritas às pressas, mas funcionaram até agora. O problema é definir todos os atributos em relação ao tipo Enum e não seus valores, então, enquanto as suposições antes das funções se mantiverem, ele será capaz de recuperar consistentemente, eu acho.