C# 嵌套的if语句不在“后面”;“地图”;

C# 嵌套的if语句不在“后面”;“地图”;,c#,C#,我对一些嵌套的if语句有点问题。下面是它的外观: if (selectedlocat == "") { if (selectedfield == "") { } else { } } else { if (selectedfield == "") { } else { } } 它没有正确地遵循“地图”。出于某种原因,它总是转到底部else语句中的else语句。我知道这一点,因为它在那个方面给了我一个

我对一些嵌套的if语句有点问题。下面是它的外观:

if (selectedlocat == "")
{
    if (selectedfield == "")
    {
    }
    else
    {
    }
}
else
{
    if (selectedfield == "")
    {
    }
    else
    {
    }
}
它没有正确地遵循“地图”。出于某种原因,它总是转到底部else语句中的else语句。我知道这一点,因为它在那个方面给了我一个错误,当时它甚至不应该到达代码的那个部分

发生了什么事,我该如何解决

**编辑***

好的,让我做一点澄清:

它在一个razor网页中,所以调试对我没有任何好处,直到我遇到错误

这些值实际上是空的,每个if和else中都有一个foreach

整个故事:

我有一个网站,我在其中获得数据,我有条件地显示它的基础上的下拉形式是什么。我认为它在嵌套中的原因是,我让它使用一个下拉列表,但当我添加第二个下拉列表时,我必须使它有条件。以下是完整的代码:

        @{
           if (selectedlocat == "")
           {
               if (selectedfield == "")
               {
                   foreach (var row1 in db.Query(querypeople + order))

                    {
                        <tr>
                            <td style="text-align:center; width: 110px">@row1.Last_Name, @row1.First_Name </td>
                            <td>@row1.Firm_Name</td>
                            <td style="text-align:center"><a href="http://@row1.Website">@row1.Website</a></td>
                            <td style="text-align:center">@row1.Phone_Office</td>
                            <td style="text-align:center">@row1.City_Phys</td>
                        </tr>
                    }
                }
                else
                {
                   foreach (var row2 in db.Query(querypeople + where + field + selectedfield + app + order))

                    {
                        <tr>
                            <td style="text-align:center; width: 110px">@row2.Last_Name, @row2.First_Name </td>
                            <td>@row2.Firm_Name</td>
                            <td style="text-align:center"><a href="http://@row2.Website">@row2.Website</a></td>
                            <td style="text-align:center">@row2.Phone_Office</td>
                            <td style="text-align:center">@row2.City_Phys</td>
                        </tr>
                    }
               }

           }
           else
           {
               if (selectedfield == "")
               {
                   foreach (var row3 in db.Query(querypeople + where + city + selectedlocat + app + order))

                    {
                        <tr>
                            <td style="text-align:center; width: 110px">@row3.Last_Name, @row3.First_Name </td>
                            <td>@row3.Firm_Name</td>
                            <td style="text-align:center"><a href="http://@row3.Website">@row3.Website</a></td>
                            <td style="text-align:center">@row3.Phone_Office</td>
                            <td style="text-align:center">@row3.City_Phys</td>
                        </tr>
                    }
                }
                else
                {
                    foreach (var row4 in db.Query(querypeople + where + city + selectedlocat + app + and + field + selectedfield + app + order))

                    {
                        <tr>
                            <td style="text-align:center; width: 110px">@row4.Last_Name, @row4.First_Name </td>
                            <td>@row4.Firm_Name</td>
                            <td style="text-align:center"><a href="http://@row4.Website">@row4.Website</a></td>
                            <td style="text-align:center">@row4.Phone_Office</td>
                            <td style="text-align:center">@row4.City_Phys</td>
                        </tr>
                    }
                }

          }
    }
        </tbody>
    </table>
@{
如果(selectedlocat==“”)
{
如果(selectedfield==“”)
{
foreach(db.Query中的变量row1(queryopele+order))
{
@row1.Last_Name,@row1.First_Name
@第1行。公司名称
@row1.电话办公室
@罗1.城市体育
}
}
其他的
{
foreach(数据库查询中的变量row2(queryopele+where+field+selectedfield+app+order))
{
@row2.Last_Name,@row2.First_Name
@第2行。公司名称
@row2.电话办公室
@罗2.城市体育
}
}
}
其他的
{
如果(selectedfield==“”)
{
foreach(数据库查询中的变量row3(queryopele+where+city+selectedlocat+app+order))
{
@row3.Last_Name,@row3.First_Name
@第3行。公司名称
@row3.电话办公室
@罗3.城市体育
}
}
其他的
{
foreach(db.Query中的变量row4(queryopele+where+city+selectedlocat+app+和+field+selectedfield+app+order))
{
@row4.Last_Name,@row4.First_Name
@第4行。公司名称
@row4.电话办公室
@第4行城市体育
}
}
}
}

我希望这能让我更好地了解我在这里要做什么

*编辑*


所以我可以更好地形成我未来的问题,为什么你否决了这一个?

如果它要转到else/else,那么selectedlocat和selectedfield都不等于“”。您检查过它们是否为空吗?

您的逻辑没有问题。您可以使用
string.Trim()
函数删除任何空格字符,以防它们有空格。(如果不想将空格作为零长度字符串)


根据您的要求,您也可以使用方法

“我知道这一点,因为它会给我一个错误”使用调试器而不是等待错误。您调试过吗?已选择位置!=“”和selectedfield!=“?@joshua:也许OP不想这样处理
null
?将此代码用于空字符串没有什么错…@DavidArno您的单元测试会告诉您在哪一行出现错误?@DavidArno要真正理解代码词是如何工作的,而不仅仅是它是否工作——以及如果单元测试失败,它是如何不工作的——没有什么可以替代在调试器中单步执行所有新代码。当然,您也应该编写单元测试,但仅仅说“调试是一种糟糕的旧方法”是胡说八道。其想法是,它们要么是空的,要么有一个我在本页前面的下拉表单中发布的值。如果我选择了一个值,它将转到else,但是如果它为空,它将跟随If转到下一个语句
if (selectedlocat.Trim() == "")
{
    if (selectedfield.Trim() == "")
    { 
    }else{ 
    }
}
else
{
    if (selectedfield.Trim() == "")
    { 
    }else{ 
    }
}