为什么在这种情况下,我可以使用for而不是switch-case



我有一个方法,在这个方法中,首先,我像这样使用切换大小写:

public int setDeviceName 
{
set
{
device_id = value;
DeviceNoList[(page_no - 1) * display_data_num + selectedTagNo - 1] = value;
switch (selectedDeviceNo)
{
case 1:
lblLocation1.Text = lblDeviceName_Selected(device_id);
break;
case 2:
lblLocation2.Text = lblDeviceName_Selected(device_id);
break;
case 3:
lblLocation3.Text = lblDeviceName_Selected(device_id);
break;
case 4:
lblLocation4.Text = lblDeviceName_Selected(device_id);
break;
case 5:
lblLocation5.Text = lblDeviceName_Selected(device_id);
break;
case 6:
lblLocation6.Text = lblDeviceName_Selected(device_id);
break;
case 7:
lblLocation7.Text = lblDeviceName_Selected(device_id);
break;
case 8:
lblLocation8.Text = lblDeviceName_Selected(device_id);
break;
default:
break;
}
}
get
{
return device_id;
}
}
之后,我尝试像下面这样做For循环:
public int setDeviceName 
{
set
{
device_id = value;
DeviceNoList[(page_no - 1) * display_data_num + selectedTagNo - 1] = value;
Label [] lbl_Location = { lblLocation1, lblLocation2, lblLocation3, lblLocation4, lblLocation5, lblLocation6, lblLocation7, lblLocation8 };
//set deviceName to each label in form
for(int i = 0; i<display_data_num; i++)
{
lbl_Location[i].Text = lblDeviceName_Selected(device_id);
}
}
get
{
return device_id;
}
}

我检查过了,我的程序仍然运行正常,我不知道可以用For代替Switch-case吗?如果不是,为什么我的程序仍然工作。我是编程新手。

当有许多不同的情况时,使用for循环比使用switch和if循环更好,并且所有情况都是按顺序排列的数字。有很多原因,但最好的是:哪个更容易读和写?100行case还是几行for循环?

在这种情况下,如果你能把它改成这种形式,那就好得多了。但是,我们不能将它直接移动到您想要的位置,因为索引([i])并不像您想象的那样工作。索引获取集合的指定索引处的值,可能是数组、列表等。

如果我们改变lbl_Location1,…对数组:

string[] lbl_Location = new string[]{ "a value 1", "a value 2", "and more" };

显然将字符串更改为您选择的值和类型。然后,您可以做您想做的事情并遍历索引,这样更好。注意,索引从0开始!第一个值为0,第二个值为1,以此类推。

实现(注意,我将for语句中的条件更改为数组的长度,这是一种更清晰、更简单的方法。)除非你在做一些不同的事情,它不仅仅是数组的长度,而是使用this):

for(int i = 0; i<lbl_Location.Length; i++)
{
lbl_Location[i].Text = lblDeviceName_Selected(device_id);
}

如果你不明白或我误解了,请评论!

更多关于索引的信息:

假设我有一个变量MyString1。您试图对MyString[1](我已将i替换为1以进一步简化此操作)所做的是"寻找(为了简单起见)名为MyString的数组并查看第二个位置(记住,索引从0开始!)"。你想要它做的只是在最后添加一个1。当我们将其设置为数组时,我们实际上是在创建一个变量,该变量是多个值的容器。

最新更新