Estou tentando definir Enum
e adicionar separadores comuns válidos que são usados em arquivos CSV ou semelhantes. Em seguida, vou vinculá-lo a um ComboBox
como uma fonte de dados, de modo que sempre que adicionar ou remover da definição Enum, não precisarei alterar nada na caixa de combinação.
O problema é como posso definir enum com representação de string, algo como:
public enum SeparatorChars{Comma = ",", Tab = "\t", Space = " "}
Respostas:
Você não pode - os valores enum devem ser valores integrais. Você pode usar atributos para associar um valor de string a cada valor enum ou, neste caso, se cada separador for um único caractere, você pode apenas usar o
char
valor:(EDITAR: Apenas para esclarecer, você não pode fazer
char
o tipo subjacente do enum, mas pode usarchar
constantes para atribuir o valor integral correspondente a cada valor de enum. O tipo subjacente do enum acima éint
.)Em seguida, um método de extensão, se você precisar:
fonte
Pelo que eu sei, você não terá permissão para atribuir valores de string a enum. O que você pode fazer é criar uma classe com constantes de string nela.
fonte
separator
agora é uma string (pode ser qualquer coisa) em vez de umSeparator
tipo com valores válidos restritos.Você pode alcançá-lo, mas exigirá um pouco de trabalho.
Consulte: Enum com valores de string em C #
fonte
Para um enum simples de valores de string (ou qualquer outro tipo):
Uso:
string MyValue = MyEnumClass.MyValue1;
fonte
Você não pode fazer isso com enums, mas pode fazer assim:
fonte
comboBox.DataSource = Enum.GetValues(typeof(myEnum));
neste caso?switch-case
blocos. Os campos devem estarconst
em ordem. Mas ainda não pode ser evitado se você quiserEnum.GetValues(typeof(myEnum))
.const
vez destatic
. Constantes são somente leitura, bem como estáticas e não são atribuíveis em construtores (a menos que campos somente leitura).Você não pode, porque enum só pode ser baseado em um tipo numérico primitivo. Você pode tentar usar um
Dictionary
:Como alternativa, você pode usar um
Dictionary<Separator, char>
ouDictionary<Separator, string>
ondeSeparator
é um enum normal:o que seria um pouco mais agradável do que manusear as cordas diretamente.
fonte
Uma classe que emula o comportamento de enum, mas usando em
string
vez de,int
pode ser criada da seguinte maneira ...Uso...
então...
fonte
GrainType myGrain = "GT_CORN"
, por exemplo.É meio tarde para responder, mas talvez ajude alguém no futuro. Achei mais fácil usar struct para esse tipo de problema.
O exemplo a seguir é copiar a parte colada do código MS:
fonte
Para as pessoas que chegam aqui em busca de uma resposta para uma pergunta mais genérica, você pode estender o conceito de classe estática se quiser que seu código se pareça com um
enum
.A abordagem a seguir funciona quando você não finalizou o
enum names
que deseja eenum values
é astring
representação doenam name
; usenameof()
para tornar sua refatoração mais simples.Isso atinge a intenção de um enum que tem valores de string (como o seguinte pseudocódigo):
fonte
Talvez seja tarde demais, mas aqui vai.
Podemos usar o atributo EnumMember para gerenciar os valores Enum.
Desta forma, o valor do resultado para EUnitOfMeasure será KM ou MI. Isso também pode ser visto na resposta de Andrew Whitaker .
fonte
Criei uma classe base para a criação de enums com valor de string no .NET. É apenas um arquivo C # que você pode copiar e colar em seus projetos ou instalar por meio do pacote NuGet denominado StringEnum .
Uso:
Recursos
<completitionlist>
. (Funciona em C # e VB): ieInstalação
Ou:
.Net Standard 1.0
para que seja executado em.Net Core
> = 1.0,.Net Framework
> = 4.5,Mono
> = 4.6, etc.Newtonsoft.Json
suporte de serialização, copie esta versão estendida. StringEnum.csPercebi depois do fato que este código é semelhante à resposta de Ben. Sinceramente, escrevi do zero. No entanto, acho que tem alguns extras, como o
<completitionlist>
hack, a classe resultante se parece mais com um Enum, sem uso de reflexão em Parse (), o pacote NuGet e repo, onde espero resolver problemas e comentários recebidos.fonte
Com base em algumas das respostas aqui, implementei uma classe base reutilizável que imita o comportamento de um enum, mas com
string
o tipo subjacente. Ele suporta várias operações, incluindo:.Equals
,==
e!=
Esta é a classe base em sua totalidade:
E é assim que você implementaria seu "string enum":
Que poderia ser usado assim:
Espero que alguém ache isso útil!
fonte
Bem, primeiro você tenta atribuir strings e não chars, mesmo que sejam apenas um caractere. use ',' em vez de ",". A próxima coisa é, enums só aceitam tipos integrais sem que
char
você possa usar o valor Unicode, mas eu recomendo fortemente que você não faça isso. Se você tiver certeza de que esses valores permanecem os mesmos, em diferentes culturas e idiomas, eu usaria uma classe estática com strings const.fonte
Embora não seja realmente possível usar a
char
ou astring
como base para um enum, acho que não é isso que você realmente gosta de fazer.Como você mencionou, você gostaria de ter uma enumeração de possibilidades e mostrar uma representação de string disso em uma caixa de combinação. Se o usuário selecionar uma dessas representações de string, você gostaria de obter o enum correspondente. E isso é possível:
Primeiro, temos que vincular alguma string a um valor enum. Isso pode ser feito usando o método
DescriptionAttribute
descrito aqui ou aqui .Agora você precisa criar uma lista de valores enum e descrições correspondentes. Isso pode ser feito usando o seguinte método:
Agora você terá uma lista de pares de valores-chave de todos os enums e suas descrições. Portanto, vamos simplesmente atribuir isso como uma fonte de dados para uma caixa de combinação.
O usuário vê todas as representações de string do enum e dentro do seu código você obterá o valor de enum desejado.
fonte
Não podemos definir enumeração como tipo de string. Os tipos aprovados para um enum são byte, sbyte, short, ushort, int, uint, long ou ulong.
Se precisar de mais detalhes sobre a enumeração, siga o link abaixo, que o ajudará a entender a enumeração. Enumeração
@ narendras1414
fonte
Funciona para mim..
fonte
O que comecei a fazer recentemente é usar tuplas
fonte
fonte