Pergunta

Comecei a usar C# e tenho alguns problemas. Existe alguma maneira de codificar o equivalente C# da instrução VB.NET Select como a seguinte?

Select Object.Name.ToString()
    Case "Name1"
        'Do something
    Case "Name2"
        'Do something else
    Case Else
        'Do the default action
End Select

Qualquer ajuda seria muito apreciada.


Obrigado pela entrada até agora e se eu conectar vários controles a um manipulador de eventos como a seguir e quero executar uma ação ligeiramente diferente para cada controle:

Private Sub Button_Click(sender as Object, e as EventArgs) _
  Handles button1.Click, Button2.Click

    'do a general activity

    Select CType(sender, Button).Name
        Case button1.Name
            'do something
        Case button2.Name
            'do something else
        Case Else
            'do the defalut action
    End Select
End Sub

Existe alguma maneira de fazer a instrução SELECT acima em C# sem ter que usar o IFS aninhado?

Foi útil?

Solução

Eu cheguei a encontrar com o tempo que algum vb.net Select...Case As construções não se aplicam em C# e a única maneira de escrever é escrever muito IFS.

Por exemplo, no vb.net, você pode escrever:

Dim num as Integer = 5

Select Case num
    Case 1 to 10
        'do something

    Case 11 to 20
        'do another thing

    Case Else
        'do the default
End Select

Mas não há switch Construa em C# que permite que você faça algo desse tipo. Você terá que codificar na rotatória assim:

int num = 5;

switch (num)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
        //do something
        break;
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
        //do something else
        break;
    default:
        //do the default
        break;
}

Ou se você estiver trabalhando com Double ou qualquer tipo que seja composto de valores contínuos em vez de discretos, você terá que usar ifs para obter a ação necessária.

Razão? C#S switch requer constantes para os vários cases. Isso é diferente do VB.NET's Select Case o que permite escrever faixas.

Outras dicas

Você estaria procurando a declaração de interruptor ...

switch (Object.Name.ToString())
{
   case  "Name1":
     //Do something
     break;
   default:
     //default
     break;
}

Observe que as intervalos são importantes, caso contrário, o programa passará por seus casos. Você deve encontrar isso em quase qualquer Introdução C# ...

Use um switch declaração.

switch (object.Name.ToString()) {
  case "Name1":
    break;
    //Do something 
  case "Name2":
    break;
    //Do something else 
  default:
    break;
   //Do the default action 
}

E não se esqueça que existe um ferramenta de conversão online grátis Isso permite que você converta o vb.net em c# e vice -versa.

Com C# 7, o switch foi significativamente aprimorado, e agora é possível aplicar mais condições nos casos, embora ainda não seja tão "limpo" quanto a versão VB. Por exemplo, você poderia fazer algo como:

switch (examScore)
{
  case int es when es >= 90: grade = "A"; break;
  case int es when es >= 80: grade = "B"; break;
  case int es when es >= 70: grade = "C"; break;
  case int es when es >= 60; grade = "D"; break;
  default: grade = "F"; break;
}

Retirado de / referências:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top