【问题标题】:How to Use Multiple IF Conditions in C#如何在 C# 中使用多个 IF 条件
【发布时间】:2018-05-29 16:16:57
【问题描述】:

我想在不同的会话中存储多个值,因为我在 VB 代码中有多个 If 条件可以正常工作

If roleRow.Item("Code").ToString() = "101" Then 'Admin Settings
    If roleRow.Item("Active") = True Then Session("101") = True Else Session("101") = False
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
If roleRow.Item("Code").ToString() = "103" Then 'Invoices List
    If roleRow.Item("Active") = True Then Session("103") = True Else Session("103") = False
End If

但相同的代码结构在 C# 中不起作用。

它只评估第一个 IF 条件和其余条件,它显示与第一个 IF 条件相同的值。有什么建议可以解决这个问题吗?

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;
    }
}

【问题讨论】:

  • “和其他条件它显示与第一个 IF 条件相同的值” - 我不清楚你的意思是什么。调试时具体发生了什么?您的运行时值是什么?您对比较有何期望? C# 中的 if 结构工作得很好,不清楚你在这里期待什么。
  • "但是相同的代码结构在 C# 中不起作用" 不,你没有相同的结构。如果 VB 代码的格式“正确”,那可能会更明显
  • 当我调试......对于这一行(第一行) dRow["Code"].ToString() == "104" 它工作正常......但是当我去调试时到下一个或第三个条件...它显示相同的值 104 并且条件保持为 False .....尽管它应该是 True
  • 您的 VB 代码有嵌套的 if 语句,而您的 C# 代码没有。所以它是一个不同的结构。
  • @MalikUsman:对于同一记录,如何永远满足多个条件? dRow["Code"].ToString() 不能同时是 "104" "105"。完全不清楚你在描述什么。

标签: c# asp.net visual-studio if-statement switch-statement


【解决方案1】:

目前尚不清楚您要完成什么,但我建议您更多地考虑这个问题,而不是“翻译”。

这是否更接近您真正想要完成的目标?

//First I'll create an array of every value to be inspected and iterate through it....
foreach (var c in new[] {"104", "105", "106"})
{
    //Then I'll check the current value (considering the value of dRow["Active"]...
    Session[c] = ( ((bool)dRow["Active"]) && (dRow["Code"].ToString() == c) )  //Thanks to @jjwillmc observation
}

如果您喜欢只使用 IF,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
If roleRow.Item("Code").ToString() = "102" Then 'Summaries / Reports
    If roleRow.Item("Active") = True Then Session("102") = True Else Session("102") = False
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

变成:

if (roleRow.Item("Code").ToString() == "101") //Admin Settings
{
    if (roleRow.Item("Active")) 
      Session["101"] = true; 
    else 
      Session["101"] = False;
    //Or simply: Session["101"] = (roleRow.Item("Active"));
}
if (roleRow.Item("Code").ToString() == "102") //Summaries / Reports
{
    if (roleRow.Item("Active")) 
      Session["102"] = true; 
    else 
      Session["102"] = false;
    //Or simply: Session["102"] = (roleRow.Item("Active"));
}
if (roleRow.Item("Code").ToString() == "103") //Invoices List
{
    if (roleRow.Item("Active")) 
      Session["103"] = true;
    else 
      Session["103"] = false;
    //Or simply: Session["103"] = (roleRow.Item("Active"));
}

希望对你有帮助。

【讨论】:

  • 我想在不同的地方使用这些会话.....Session["101"], Session["102"], Session["103"], Session["104"]。 ........等等........所以这就是为什么我需要存储行值以存储在不同的会话中......但是有条件...... . 作为参考,您还可以看到我在上面发布的 VB 代码.....在 VB.Net 中运行良好......但相同的代码结构在 C# 中不起作用。
  • 该代码结构也适用于 C#。您必须发布整个代码,以便我们可以看到您如何遍历行以设置所有这些会话变量
  • @MalikUsman,仅使用 IF 的代码结构也适用于 C#,可能缺少某些东西(我会更仔细地检查您的 VB 代码并尝试找到它)。但是考虑到上面的代码(使用 foreach)可能是一个更好的算法。您可以使用包含所有您想要的代码的数组,它仍然可以工作,而无需增加 IF 的数量。
  • 这段代码实际上略有不同,因为如果 active 为 false,它永远不会将 Session[x] 设置为 false。我可以在等待编辑后更新,否则我同意 - OP 非常模糊。
  • 我已经用我的读取方法更新了主问题代码......所以你可以更好地看............记住我需要那些多个 SESSIOSN 来存储多行值作为上面的结构............不是只评估一个条件............你可以提出更好或替代的方法......
【解决方案2】:

Done....在代码中缺少 For Loop...这样它读取每一行并将每一行的值放入不同的 SESSION 中......也在这一行之前 DataRow dRow; 您必须将每个 SESSION = False 声明为默认值....

DataRow dRow;
            if (aDT.Rows.Count > 0)
            { 
                for (var i = 0; i <= aDT.Rows.Count -1; i++)
                {                   
                    dRow = aDT.Rows[i];                        

                    if (dRow["Code"].ToString() == "101" && (Boolean)dRow["Active"] == true)
                    {
                        Session["101"] = true;
                    }                    

                    else if (dRow["Code"].ToString() == "102" && (Boolean)dRow["Active"] == true)
                    {
                        Session["102"] = true;
                    }                   

                    else if (dRow["Code"].ToString() == "103" && (Boolean)dRow["Active"] == true)
                    {
                        Session["103"] = true;
                    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2020-10-02
    • 2018-05-10
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多