Fazer uma PerguntaFazer uma Pergunta
 

RespondidoCapturando enumerador parcial

  • sexta-feira, 30 de outubro de 2009 15:32LeandrodeMelloFagundes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Boa tarde,

    possuo um enum que contém dados como:
    SuperiorDireito = 1,
    SuperiorEsquerdo = 2,
    InferiorDireito = 4,
    InferiorEsquerdo = 8,
    Direito = 5,
    Esquerdo = 10,
    Todos = 15

    Deu pra entender? O Direito é a soma do superior com o inferior direito, e todos é a soma de todos.
    Como faço isso funcionar da forma correta e conseguir capturar isso em um if?
    Queria pegar, If SuperiorDireito then
    mesmo que o escolhido seja DIREITO teria que pegar também.

    Aguardo algum tipo de ajuda

    att
    Leandro
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)

Respostas

  • quarta-feira, 4 de novembro de 2009 2:15Caio Proiete [MVP]MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     RespondidoContém Código
    Olá Leandro,

    Apenas para complementar, seria uma boa prática aplicar o atributo Flags do .NET Framework nessa sua Enum, para que você possa visualizar todos os valores que estão atribuídos a uma variável, quando estiver fazendo o debug da aplicação.

    [Flags]
    public enum RoundedBoxCorners
    {
        None = 0,
        TopLeft = 1,
        TopRight = 2
        // ...
    }
    
    


    Durante o debug:
    Image and video hosting by TinyPic

    Outro detalhe importante, é que você pode utilizar os próprios membros da Enum para definir as suas combinações, deixando para o compilador fazer os cálculos... Facilita bastante na manutenção quando você decidir incluir novos valores e/ou modificar valores existentes, e também fica muito mais claro na leitura do código, quais são as combinações possíveis:

    [Flags]
    public enum RoundedBoxCorners
    {
        None = 0,
        TopLeft = 1,
        TopRight = 2,
        BottomLeft = 4,
        BottomRight = 8,
        Left = TopLeft | BottomLeft,
        Right = TopRight | BottomRight,
        TopLeft_BottomRight = TopLeft | BottomRight,
        TopRight_BottomLeft = TopRight | BottomLeft,
        All = TopLeft | TopRight | BottomLeft | BottomRight
    }
    
    



    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com
  • terça-feira, 3 de novembro de 2009 17:43LeandrodeMelloFagundes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     RespondidoContém Código
    Pessoal,

    obrigado pelas respostas mas o que eu procurava era um jeito de não precisar converter em inteiro. Segue um exemplo:

    public enum RoundedBoxCorners
    {
        None = 0,
        TopLeft = 1,
        TopRight = 2,
        BottomLeft = 4,
        BottomRight = 8,
        Left = 5,
        Right = 10,
        TopLeft_BottomRight = 9,
        TopRight_BottomLeft = 6,
        All = 15 
    }
    
    
    e na verificação, basta fazer assim
    if (RoundedBoxCorners.TopLeft == (m_roundedcorners & RoundedBoxCorners.TopLeft))
    {<br/>
        //código aqui<br/>
    }
    
    No Exemplo acima, se for TopLeft, Left, TopLeft_BottomRight ou All ele considera como left (pois contém o valor 1)

    Obrigado a todos de qualquer forma.

    Abraços


    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)

Todas as Respostas

  • sexta-feira, 30 de outubro de 2009 15:56Seilor Bonancio Junior Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Vc pode usar converts nessa manera abaixo

    Esse drawType é uma enum

     DrawType drawType = (DrawType)Enum.Parse(typeof(DrawType), context.Request["DrawType"]);
  • sexta-feira, 30 de outubro de 2009 16:18Ramon B. Lima Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Converte para inteiro e faz o tratamento
    exemplo:
       Class Program
            Private Shared Sub Main(ByVal args As String())
                Dim a As Cordenadas = Cordenadas.Direito
                Dim b As Cordenadas = Cordenadas.InferiorDireito
                Dim c As Cordenadas = Cordenadas.SuperiorDireito
                Dim d As Cordenadas = Cordenadas.Esquerdo
                Dim e As Cordenadas = Cordenadas.SuperiorEsquerdo
               
                If CInt(a) = (CInt(b) + CInt(c)) Then
                   Console.WriteLine("b +c = a")
                  
               End If
           End Sub
       End Class
       Public Enum Cordenadas
           SuperiorDireito = 1
           SuperiorEsquerdo = 2
           InferiorDireito = 4
           InferiorEsquerdo = 8
           Direito = 5
           Esquerdo = 10
           Todos = 15
       End Enum
    
    
    

  • terça-feira, 3 de novembro de 2009 17:43LeandrodeMelloFagundes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     RespondidoContém Código
    Pessoal,

    obrigado pelas respostas mas o que eu procurava era um jeito de não precisar converter em inteiro. Segue um exemplo:

    public enum RoundedBoxCorners
    {
        None = 0,
        TopLeft = 1,
        TopRight = 2,
        BottomLeft = 4,
        BottomRight = 8,
        Left = 5,
        Right = 10,
        TopLeft_BottomRight = 9,
        TopRight_BottomLeft = 6,
        All = 15 
    }
    
    
    e na verificação, basta fazer assim
    if (RoundedBoxCorners.TopLeft == (m_roundedcorners & RoundedBoxCorners.TopLeft))
    {<br/>
        //código aqui<br/>
    }
    
    No Exemplo acima, se for TopLeft, Left, TopLeft_BottomRight ou All ele considera como left (pois contém o valor 1)

    Obrigado a todos de qualquer forma.

    Abraços


    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
  • quarta-feira, 4 de novembro de 2009 2:15Caio Proiete [MVP]MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     RespondidoContém Código
    Olá Leandro,

    Apenas para complementar, seria uma boa prática aplicar o atributo Flags do .NET Framework nessa sua Enum, para que você possa visualizar todos os valores que estão atribuídos a uma variável, quando estiver fazendo o debug da aplicação.

    [Flags]
    public enum RoundedBoxCorners
    {
        None = 0,
        TopLeft = 1,
        TopRight = 2
        // ...
    }
    
    


    Durante o debug:
    Image and video hosting by TinyPic

    Outro detalhe importante, é que você pode utilizar os próprios membros da Enum para definir as suas combinações, deixando para o compilador fazer os cálculos... Facilita bastante na manutenção quando você decidir incluir novos valores e/ou modificar valores existentes, e também fica muito mais claro na leitura do código, quais são as combinações possíveis:

    [Flags]
    public enum RoundedBoxCorners
    {
        None = 0,
        TopLeft = 1,
        TopRight = 2,
        BottomLeft = 4,
        BottomRight = 8,
        Left = TopLeft | BottomLeft,
        Right = TopRight | BottomRight,
        TopLeft_BottomRight = TopLeft | BottomRight,
        TopRight_BottomLeft = TopRight | BottomLeft,
        All = TopLeft | TopRight | BottomLeft | BottomRight
    }
    
    



    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com
  • quarta-feira, 4 de novembro de 2009 12:06LeandrodeMelloFagundes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Como sempre uma aula Caio!
    Vou alterar sim, tenha certeza disso!
    :)

    Muito obrigado
    Abraços

    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)