缩短多余的 switch 语句
Posted
技术标签:
【中文标题】缩短多余的 switch 语句【英文标题】:Shorten redundant switch statements 【发布时间】: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 中的可见性属性。这将更易于维护。
【参考方案1】:
您可以使用ternary operator
将switch
语句转换为单行语句,
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.Hidden
和 Visibility.Visible
。它也更易于维护:如果您想更改显示错误消息的方式,您只需要修改一个方法。
【讨论】:
以上是关于缩短多余的 switch 语句的主要内容,如果未能解决你的问题,请参考以下文章