【问题标题】:Shorten redundant switch statements缩短多余的 switch 语句
【发布时间】:2022-01-17 16:50:39
【问题描述】:

我从一个解决方案中获得了这段代码,我在谷歌上搜索了一个关于意大利面条if..else 语句的问题。有没有办法完全缩短这个时间,或者有一种不同的方法来使代码至少更易于维护。

            switch (registerControl.Valid_FullName(student.Student_Name) == true)
            {
                case true:
                    lblFullNameError.Visibility = Visibility.Hidden;
                    break;
                case false:
                    lblFullNameError.Visibility = Visibility.Visible;
                    break;
            }

            switch (registerControl.Valid_Email(student.Student_Email) == true)
            {
                case true:
                    lblEmailError.Visibility = Visibility.Hidden;
                    break;
                case false:
                    lblEmailError.Visibility = Visibility.Visible;
                    break;
            }

            switch (registerControl.Valid_Course(student.Student_Course) == true)
            {
                case true:
                    lblCourseError.Visibility = Visibility.Hidden;
                    break;
                case false:
                    lblCourseError.Visibility = Visibility.Visible;
                    break;
            }

            switch (registerControl.Valid_Password(student.Student_Password) == true)
            {
                case true:
                    lblPasswordError.Visibility = Visibility.Hidden;
                    break;
                case false:
                    lblPasswordError.Visibility = Visibility.Visible;
                    break;
            }

            switch (registerControl.Confirm_Password(student.Student_Password, student.student_ConfirmPassword) == true)
            {
                case true:
                    lblPasswordMatch.Visibility = Visibility.Hidden;
                    break;
                case false:
                    lblPasswordMatch.Visibility = Visibility.Visible;
                    break;
            }

【问题讨论】:

  • lblFullNameError.Visibility = registerControl.Valid_FullName(student.Student_Name) ? Visibility.Hidden : Visibility.Visible ?使用基于真/假输入返回 Visibility.Visible 或 Visibility.Hidden 的函数。在 Xaml 中使用带有 ValueConverters 的 Binding 来获取可见值,....
  • 最好的方法是将值设置为视图模型中的属性,并通过 BooleanToVisibilityConverter 将它们绑定到 xaml 中的可见性属性。这将更易于维护。

标签: c# wpf


【解决方案1】:

您可以使用ternary operatorswitch 语句转换为单行语句,

lblFullNameError.Visibility = registerControl.Valid_FullName(student.Student_Name)  
                  ? Visibility.Hidden : Visibility.Visible;

您可以对其余的开关块应用相同的逻辑。

【讨论】:

  • @TimSchmelter 我修好了。感谢您的观察。
【解决方案2】:

除了用三元运算符替换switch语句(如Prasad的回答所示)之外,您还可以将逻辑封装成一个方法:

void ToggleError(bool isDataValid, Label errorLabel)
{
    errorLabel.Visibility = isDataValid ? Visibility.Hidden : Visibility.Visible;
}

并按如下方式使用:

ToggleError(registerControl.Valid_FullName(student.Student_Name), lblFullNameError);
ToggleError(registerControl.Valid_Email(student.Student_Email), lblEmailError);
...

这样,您不必在每一行都重复 Visibility.HiddenVisibility.Visible。它也更易于维护:如果您想更改显示错误消息的方式,您只需要修改一个方法。

【讨论】:

    猜你喜欢
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多