缩短冗余交换机语句



我从一个解决方案中得到了这段代码,我在谷歌上搜索了一个关于意大利面条式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;
}

您可以使用ternary operator、将switch语句转换为单行语句

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

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

除了用三元运算符替换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。它也更易于维护:如果你想更改显示错误消息的方式,你只需要修改一个方法。

最新更新