C#-将Switch语句转换为If-Else

时间:2020-02-08 20:22:56

标签: c# if-statement listbox switch-statement

在执行此特定任务时遇到了一些麻烦。使用switch语句并将其转换为if-else。该程序利用列表框来选择位置并显示相应的时区。

if (cityListBox.SelectedIndex != -1)
        {
            //Get the selected item.
            city = cityListBox.SelectedItem.ToString();

            // Determine the time zone.
            switch (city)
            {
                case "Honolulu":
                    timeZoneLabel.Text = "Hawaii-Aleutian";
                    break;
                case "San Francisco":
                    timeZoneLabel.Text = "Pacific";
                    break;
                case "Denver":
                    timeZoneLabel.Text = "Mountain";
                    break;
                case "Minneapolis":
                    timeZoneLabel.Text = "Central";
                    break;
                case "New York":
                    timeZoneLabel.Text = "Eastern";
                    break;
            }
        }
        else
        {
            // No city was selected.
            MessageBox.Show("Select a city.");

3 个答案:

答案 0 :(得分:3)

通过这种方法,您可以摆脱switchif-else语句

创建一个代表时区的类

public class MyTimezone
{
    public string City { get; set; }
    public string Name { get; set; }
}

创建时区列表并将其绑定到列表框

var timezones = new[]
{
    new MyTimezone { City = "Honolulu", Name = "Hawaii-Aleutian" },
    new MyTimezone { City = "San Francisco", Name = "Pacific" },
    // and so on...
}   

cityListBox.DisplayMember = "City";
cityListBox.ValueMember = "Name"; 
cityListBox.DataSource = timezones;

然后在代码中要使用所选时区的地方

var selected = (MyTimeZone)cityListBox.SelectedItem;
timeZoneLabel.Text = selected.Name;

由于Name属性用作ValueMember,因此可以使用SelectedValue属性。

// SelectedValue can bu null if nothing selected
timeZoneLabel.Text = cityListBox.SelectedValue.ToString();

答案 1 :(得分:1)

因此,在大多数编程语言中,switch语句和if-else语句几乎是同一条语句(通常来说;对于某些语言,某些编译器的切换可能更快,而我我不太清楚C#)。 Switch或多或少是if-else的语法糖。无论如何,与您的开关相对应的if-else语句看起来像这样:

if (city == "Honolulu") {
    timeZoneLabel.Text = "Hawaii-Aleutian";
} else if (city == "San Francisco") {
    timeZoneLabel.Text = "Pacific";
} else if (city == "Denver") {
    timeZoneLabel.Text = "Mountain";
}
... etc

这有意义吗?

答案 2 :(得分:1)

我建议将switch变成Dictionary<string, string>,即将数据(城市及其时区)和表示形式LabelListBox等)

private static Dictionary<string, string> s_TimeZones = new Dictionary<string, string>() {
  {"Honolulu", "Hawaii-Aleutian"},
  {"San Francisco", "Pacific"},
  //TODO: add all the pairs City - TimeZone here
};

然后您可以按以下方式使用它(两个if):

if (cityListBox.SelectedIndex >= 0) {
  if (s_TimeZones.TryGetValue(cityListBox.SelectedItem.ToString(), out string tz))
    timeZoneLabel.Text = tz;
  else 
    timeZoneLabel.Text = "Unknown City";
} 
else {
  // No city was selected.
  MessageBox.Show("Select a city.");
  ...