【问题标题】:Why does this if else statement work but not this Switch statement为什么这个 if else 语句有效,但这个 Switch 语句无效
【发布时间】:2019-12-11 08:21:48
【问题描述】:

我有这个 if else 语句在我的 ExamController.cs 上运行得非常好,但我想使用 switch 语句使其更易于阅读。我添加到 switch 语句中的唯一内容是 ExamId。

为什么这个 if else 语句有效,但我的 switch case 无效。该错误与退货有关,但我没有对退货进行任何更改。

if (model.SearchType == "School")
{
    result = FindExams((e) => e.School.School_Name.Contains(model.SearchInput));
}
else if (model.SearchType == "Exam Date")
{
    result = FindExams((e) => e.Exam.ExamDate >= model.StartDate.Date && e.Exam.ExamDate <= model.EndDate.Date);
}
else if (model.SearchType == "District")
{
    result = FindExams((e) => e.District.Name.Contains(model.SearchInput));
}
else if (model.SearchType == "ID")
{
    result = FindExams((e) => e.Student.ID.Contains(model.SearchInput));
}
else if (model.SearchType == "First Name")
{
    result = FindExams((e) => e.Student.FirstName.Contains(model.SearchInput));
}
else if (model.SearchType == "Last Name")
{
    result = FindExams((e) => e.Student.LastName.Contains(model.SearchInput));
}

return result.OrderByDescending(r => r.ExamDate);

切换语句

switch (model.SearchType)
{
    case "School":
        result = this.FindExams((e) => e.School.School_Name.Contains(model.SearchInput));
        break;
    case "ExamDate":
        result = FindExams((e) => e.Exam.ExamDate >= model.StartDate.Date && e.Exam.ExamDate <= model.EndDate.Date);
        break;
    case "District":
        result = this.FindExams((e) => e.District.Name.Contains(model.SearchInput));
        break;
    case "ID":
        result = this.FindExams((e) => e.Student.ID.Contains(model.SearchInput));
        break;
    case "First Name":
        result = this.FindExams((e) => e.Student.FirstName.Contains(model.SearchInput));
        break;
    case "Last Name":
        result = this.FindExams((e) => e.Student.LastName.Contains(model.SearchInput));
        break;
    case "Exam Id":
        int examId = int.Parse(model.SearchInput);
        result = this.FindExams((e) => e.Exam.Exam_Id == examId);
        break;
}

return result.OrderByDescending(r => r.ExamDate);

【问题讨论】:

  • 不确定这是否是问题所在,但其中一个 if 语句会检查 Exam Date,而在 switch 中的一个情况下会检查 ExamDate。此外,您可能应该添加default 案例和result 的空检查。
  • 只是要发布该评论 - 您也缺少默认情况,但这不是导致您的问题,但它确实隐藏它
  • 代码失败时model.SearchType的值是多少?使用调试器检查值。
  • sighs 我想打自己的脸。谢谢,这是因为我没有添加空格大声笑。顺便说一句,我将如何添加一个默认案例来显示这种情况的原因?

标签: asp.net .net asp.net-core model-view-controller switch-statement


【解决方案1】:

这两个代码 sn-ps 在以下几行有所不同:

else if (model.SearchType == "Exam Date")

case "ExamDate":

如您所见,它们检查两个不同的字符串。 应该是:

case "Exam Date":

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多