Skip to content

Instantly share code, notes, and snippets.

View ThiagoBarradas's full-sized avatar
👽
em marte!

Thiago Barradas ThiagoBarradas

👽
em marte!
View GitHub Profile
// Sem flags e com uso sequencial dos números
// Podendo ter até 4.294.967.296 valores diferentes
public enum Cor
{
Vermelho = 1,
Verde = 2,
Azul = 3,
Amarelo = 4,
Branco = 5
}
// Por padrão o enum herda de int (Int32)
// 4.294.967.296 valores diferentes
// ou seja -2.147.483.648 até 2.147.483.647
// como tem 32 bits, para Flags, pode-se ter no máximo 32 valores diferentes
[Flags]
public enum Cor
{
Vermelho = 1, // 1 << 0
Verde = 2, // 1 << 1
var semCores = Cor.None;
var minhasCores = Cor.Azul | Cor.Verde;
var resultado1 = semCores.HasFlag(Cor.None); // true
var resultado2 = minhasCores.HasFlag(Cor.None); // true
var resultado3 = semCores.Equals(Cor.None); // true
var resultado4 = (semCores == Cor.None); // true
var resultado5 = (semCores == 0); // true
minhasCores.HasFlag(Cor.Azul);
Propriedade Binário Decimal
minhasCores 00000110 6
Azul 00000100 4
------------------------------
resultado 00000100 4
// O bit que indica a cor Azul retornou, o que significa que essa operação retornará true
var minhasCores = Cor.Verde | Cor.Azul;
Propriedade Binário Decimal
Verde 00000010 2
Azul 00000100 4
------------------------------
minhasCores 00000110 6
Vermelho: 00000001
Verde: 00000010
Azul: 00000100
Amarelo: 00001000
[Flags]
public enum Cor
{
Vermelho = 1,
Verde = 2,
// Vermelho + Verde = 1 + 2 = 3
Azul = 4,
// Vermelho + Azul = 1 + 4 = 5
// Verde + Azul = 2 + 4 = 6
// Vermelho + Verde + Azul = 1 + 2 + 4 = 7
// exemplo com flags
[Flags]
public enum Operation
{
None = 0, // usado quando nenhum valor for atribuido
Read = 1,
Write = 2
}
// para informar que uma operação pode ser de leitura, escrita ou ambos
var cores = Cor.Verde | Cor.Vermelho;
var resultado1 = cores.HasFlag(Cor.Verde); // true
var resultado2 = cores.HasFlag(Cor.Vermelho); // true
var resultado3 = cores.HasFlag(Cor.Amarelo); // false
var resultado4 = cores.HasFlag(Cor.Verde | Cor.Vermelho); // true, pois contém os dois
// declaração errada com valores padrões
[Flags]
public enum Cor
{
Vermelho, // valor padrão 0
Verde, // valor padrão 1
Azul, // valor padrão 2
Amarelo // valor padrão 3
}