如何在C#中实现多IF条件逻辑?VB转C#Session权限赋值异常
问题:C#多IF条件设置Session值仅第一个生效,其余结果异常
你之前用VB写的多IF条件代码能正常把不同权限值存入对应Session,但换成C#后只有第一个IF条件执行正确,其余Session值都和第一个一致,对吧?
先看你之前正常运行的VB代码:
If roleRow.Item("Code").ToString() = "101" Then 'Admin Settings If roleRow.Item("Active") = True Then Session("101") = True Else Session("101") = False End If End If If roleRow.Item("Code").ToString() = "102" Then 'Summaries / Reports If roleRow.Item("Active") = True Then Session("102") = True Else Session("102") = False End If End If If roleRow.Item("Code").ToString() = "103" Then 'Invoices List If roleRow.Item("Active") = True Then Session("103") = True Else Session("103") = False End If End If
再看你现在有问题的C#代码:
private void UserPermissions_Read() { BOL.Master.UsersRoles aDA = new BOL.Master.UsersRoles(); DAL.Master.UsersRoles.UsersRolesDataTable aDT = new DAL.Master.UsersRoles.UsersRolesDataTable(); aDT = aDA.Read("1", 1, "", 1, "", "", "", ""); DataRow dRow; if (aDT.Rows.Count > 0) { dRow = aDT.Rows[0]; if (dRow["Code"].ToString() == "101" && (Boolean)dRow["Active"] == true) { Session["101"] = true; } else { Session["101"] = false; } if (dRow["Code"].ToString() == "102" && (Boolean)dRow["Active"] == true) { Session["102"] = true; } else { Session["102"] = false; } } else { Session["101"] = false; Session["102"] = false; Session["103"] = false; } }
问题出在哪?
很明显,你的C#代码只取了aDT.Rows[0]这第一行数据来判断所有条件!比如如果第一行的Code是101,那后面判断102的时候,当前行的Code不是102,就会把Session["102"]设为false,哪怕数据表后面还有Code=102的行也不会处理到。而你的VB代码应该是在循环遍历每一行roleRow的(只是你没贴全循环部分),所以能处理所有权限行。
怎么解决?
我们需要先把所有Session权限默认设为false,然后循环遍历数据表的每一行,匹配到对应的Code就把对应Session设为true,这样逻辑更清晰,也能处理所有权限数据:
修改后的C#代码(用Switch更整洁)
private void UserPermissions_Read() { // 先初始化所有权限Session为false,避免无对应数据时状态未定义 Session["101"] = false; Session["102"] = false; Session["103"] = false; BOL.Master.UsersRoles aDA = new BOL.Master.UsersRoles(); DAL.Master.UsersRoles.UsersRolesDataTable aDT = aDA.Read("1", 1, "", 1, "", "", "", ""); // 循环遍历每一行权限数据,处理所有匹配的Code foreach(DataRow dRow in aDT.Rows) { string code = dRow["Code"].ToString(); bool isActive = (bool)dRow["Active"]; switch(code) { case "101": Session["101"] = isActive; break; case "102": Session["102"] = isActive; break; case "103": Session["103"] = isActive; break; // 后续新增权限Code,直接加case即可 } } }
如果你偏好IF判断的写法
也可以把循环里的Switch换成IF链,逻辑是一样的:
foreach(DataRow dRow in aDT.Rows) { string code = dRow["Code"].ToString(); bool isActive = (bool)dRow["Active"]; if(code == "101") { Session["101"] = isActive; } else if(code == "102") { Session["102"] = isActive; } else if(code == "103") { Session["103"] = isActive; } }
内容的提问来源于stack exchange,提问作者Usman Jalil
相关产品推荐
相关产品推荐

