Em Java, é possível ter métodos dentro de uma enumeração.
Existe essa possibilidade em C # ou é apenas uma coleção de cadeias e é isso?
Tentei substituir, ToString()
mas ele não é compilado. Alguém tem um exemplo de código simples?
c#
enums
enumeration
Eya
fonte
fonte
Respostas:
Você pode escrever métodos de extensão para tipos de enumeração:
fonte
Você pode escrever um método de extensão para sua enumeração:
Como criar um novo método para uma enumeração (Guia de Programação em C #)
fonte
Outra opção é usar a classe de enumeração criada por Jimmy Bogard .
Basicamente, você deve criar uma classe que herda dele
Enumeration
. Exemplo:Então você pode usá-lo como um enum, com a possibilidade de colocar métodos dentro dele (entre outras coisas):
Você pode baixá-lo com o NuGet .
Embora essa implementação não seja nativa no idioma, a sintaxe (construção e uso) é bastante próxima dos idiomas que implementam enumerações nativamente melhores que o C # ( Kotlin, por exemplo).
fonte
Não. Você pode criar uma classe, em seguida, adicionar um monte de propriedades para a classe um pouco emular um enum, mas isso não é realmente a mesma coisa .
Um padrão melhor seria colocar seus métodos em uma classe separada do seu emum.
fonte
Desde que me deparei, e precisava exatamente o oposto de enum para string, aqui está uma solução genérica:
Isso também ignora maiúsculas e minúsculas e é muito útil para analisar a resposta REST da sua enumeração para obter mais segurança de tipo. Espero que ajude alguém
fonte
C # Não permite o uso de métodos em enumeradores, pois não é um princípio baseado em classe, mas sim uma matriz bidimensional com uma string e um valor.
O uso de classes é altamente desencorajado pela Microsoft, nesse caso, use struct (dados) (ures); O STRUCT foi concebido como uma classe leve para dados e seus manipuladores e pode lidar com funções muito bem. O C # e seu compilador não possuem os recursos de rastreamento e eficiência, como se conhece no JAVA, onde quanto mais vezes uma determinada classe / método é usada, mais rapidamente ela é executada e seu uso se torna 'antecipado'. O C # simplesmente não possui isso; portanto, para diferenciar, use STRUCT em vez de CLASS.
fonte