Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Foreach循环仅读取最后一项_C#_List_Foreach - Fatal编程技术网

C# Foreach循环仅读取最后一项

C# Foreach循环仅读取最后一项,c#,list,foreach,C#,List,Foreach,如果他们的代码在列表中,我需要代码选中复选框,如果不在列表中,则取消选中。foreach循环只读取列表中的最后一项。 因此,如果最后一项是WNM,则即使列表中有其他匹配项,也只会选中WNM复选框。列表中只有一行字符串 守则: foreach (string k in list) { if (k == "BGN") { CBBGN.Checked = true; } else { CBBGN.C

如果他们的代码在列表中,我需要代码选中复选框,如果不在列表中,则取消选中。foreach循环只读取列表中的最后一项。 因此,如果最后一项是WNM,则即使列表中有其他匹配项,也只会选中WNM复选框。列表中只有一行字符串

守则:

    foreach (string k in list)
    {
        if (k == "BGN")
        {
            CBBGN.Checked = true;
        }
        else { CBBGN.Checked = false; }
        if (k == "LAN")
        {
            CBLan.Checked = true;
        }
        else
        {
            CBLan.Checked = false;
        }
        if (k == "FGN")
        {
            CBFGN.Checked = true;
        }
        else
        {
            CBFGN.Checked = false;
        }
        if (k == "WNM")
        {
            CBWNM.Checked = true;
        }
        else
        {
            CBWNM.Checked = false;
        }
        if (k == "GGN")
        {
            CBGGN.Checked = true;
        }
        else
        {
            CBGGN.Checked = false;
        }
    }

您在循环上迭代,每次迭代都撤消进行该循环的迭代,因为它将命中该项的每个
if
语句的
false

一个更好的结构是将所有
Checked
状态最初设置为
false
。然后迭代列表,仅将列表中出现的
Checked
状态设置为
true
,但不要将其设置为
false

您也可以这样做,这更易于阅读。如果列表很大,您可以使用哈希集来提高性能。(谢谢@AlexeiLevenkov)

原始修复

CBBGN.Checked = false;
CBLan.Checked = false;
CBFGN.Checked = false;
CBWNM.Checked = false;
CBGGN.Checked = false;


foreach (string k in list)
{
    if (k == "BGN")
        CBBGN.Checked = true;
    if (k == "LAN")
        CBLan.Checked = true;
    if (k == "FGN")
        CBFGN.Checked = true;
    if (k == "WNM")
        CBWNM.Checked = true;
    if (k == "GGN")
        CBGGN.Checked = true;
}

您在循环上迭代,每次迭代都撤消进行该循环的迭代,因为它将命中该项的每个
if
语句的
false

一个更好的结构是将所有
Checked
状态最初设置为
false
。然后迭代列表,仅将列表中出现的
Checked
状态设置为
true
,但不要将其设置为
false

您也可以这样做,这更易于阅读。如果列表很大,您可以使用哈希集来提高性能。(谢谢@AlexeiLevenkov)

原始修复

CBBGN.Checked = false;
CBLan.Checked = false;
CBFGN.Checked = false;
CBWNM.Checked = false;
CBGGN.Checked = false;


foreach (string k in list)
{
    if (k == "BGN")
        CBBGN.Checked = true;
    if (k == "LAN")
        CBLan.Checked = true;
    if (k == "FGN")
        CBFGN.Checked = true;
    if (k == "WNM")
        CBWNM.Checked = true;
    if (k == "GGN")
        CBGGN.Checked = true;
}

如果要通过查找列表中是否有元素来控制复选框,只需使用Linq:

CBBGN.Checked = list.Any(s => s == "BGN");
CBLan.Checked = list.Any(s => s == "LAN");
CBFGN.Checked = list.Any(s => s == "FGN");
CBWNM.Checked = list.Any(s => s == "WNM");
CBGGN.Checked = list.Any(s => s == "GGN");

按照Alexei的建议和Igor的演示,使用哈希集当然会更好地提高性能和可读性。

如果您想通过查找列表中是否有元素来控制复选框,只需使用Linq:

CBBGN.Checked = list.Any(s => s == "BGN");
CBLan.Checked = list.Any(s => s == "LAN");
CBFGN.Checked = list.Any(s => s == "FGN");
CBWNM.Checked = list.Any(s => s == "WNM");
CBGGN.Checked = list.Any(s => s == "GGN");

按照Alexei的建议和Igor的演示,使用哈希集当然会更好地提高性能和可读性。

检查带有断点的列表以查看长度。
列表是如何生成的?
列表中只有一行字符串。
您希望发生什么?如果列表中的最后一项是“WNM”,它将取消选中所有其他复选框。断点是您最好的朋友…请检查带有断点的列表以查看长度。
list
是如何生成的?
列表中只有一行字符串。
您希望发生什么?如果列表中的最后一项是“WNM”,它将取消选中所有其他复选框。断点是您最好的朋友…请使用更适合此处的开关
CBBGN.Checked=list.Contains(“BGN”)
可能更容易阅读,如果
list
HashSet
它也会有相同的性能。我删除了我的评论,因为我更好地了解了OP的情况,并同意修改后的答案。使用更适合这里的开关
CBBGN.Checked=list.Contains(“BGN”)
可能更容易阅读,如果
列表
哈希集
,它也会有相同的性能。我删除了我的评论,因为我更好地了解了OP的情况,并同意修改后的答案。