You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:02:58