VB.NET Выберите ... Описание случая Эквивалент в C #

18

Я только начал использовать 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

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

    
задан Alex Essilfie 15.03.2010 в 13:36
источник
  • Обновление. С C # 7 это возможно. См. Мой ответ ниже. –  Saurabh Rai 29.03.2018 в 13:04

4 ответа

16

Я пришел со временем, что некоторые конструкции 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, что позволяет записывать диапазоны.

    
ответ дан Alex Essilfie 16.08.2010 в 14:05
  • Это только кругом из-за перспективы. Например, в нецифровых случаях оператор switch может быть выше. –  dane fairbanks 07.08.2013 в 01:47
  • С C # 7 можно добавить условие для диапазона в select statement. Переключатель был значительно расширен в C # 7. См. Мой ответ для получения дополнительной информации. –  Saurabh Rai 29.03.2018 в 13:16
9

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

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

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

    
ответ дан Paddy 15.03.2010 в 13:40
  • Обратите внимание, что вам не нужно указывать ключевое слово break, если вы выбрали исключение или вернули значение. –  intoOrbit 15.03.2010 в 13:49
  • true, но, как предпочтение, мне обычно нравится одно возвращение из методов, а не возврат изнутри коммутатора. –  Paddy 15.03.2010 в 14:51
5

Используйте 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 # и наоборот.

    
ответ дан Klaus Byskov Pedersen 15.03.2010 в 13:40
0

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

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

ответ дан Saurabh Rai 29.03.2018 в 13:13