VB.NET Select ... Case Statement Эквивалент в C # - PullRequest
18 голосов
/ 15 марта 2010

Я только начал использовать C # и у меня есть пара проблем. Есть ли способ кодировать эквивалент C # оператора VB.NET Select, как показано ниже:

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

Любая помощь будет принята с благодарностью.


Спасибо за вводные данные, что если я подключу несколько элементов управления к одному обработчику событий, как показано ниже, и я хочу выполнить немного разные действия для каждого элемента управления:

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

Есть ли какой-либо способ сделать вышеупомянутый оператор выбора в C # без необходимости использовать вложенные ifs?

Ответы [ 4 ]

16 голосов
/ 16 августа 2010

Я со временем обнаружил, что некоторые конструкции VB.NET Select...Case не применяются в C #, и единственный выход - написать много ifs.

Например, в VB.NET вы можете написать:

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

Но в C # нет конструкции switch, которая позволяла бы вам делать что-то подобное. Вам придётся закодировать код примерно так:

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;
}

Или, если вы работаете с Double или любым типом, который состоит из непрерывных, а не дискретных значений, вам придется использовать if s, чтобы получить требуемое действие.

Причина? C # switch требует констант для различных case s. Это отличается от Select Case VB.NET, который позволяет записывать диапазоны.

9 голосов
/ 15 марта 2010

Вы бы искали оператор switch ...

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

Обратите внимание, что разрывы являются импортными, иначе программа пропустит ваши дела. Вы должны быть в состоянии найти это почти на любом введении в C # ...

5 голосов
/ 15 марта 2010

Используйте оператор switch.

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

И не забывайте, что существует бесплатный онлайн-инструмент конвертации , который позволяет конвертировать VB.net в C # и наоборот.

0 голосов
/ 29 марта 2018

С C # 7, переключатель был значительно улучшен , и теперь стало возможным применять больше условий внутри случаев, хотя он все еще не так "чист", как версия VB. Например. Вы могли бы сделать что-то вроде:

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;
}

Взято из / Ссылки:

...