我不喜欢宽代码,尤其是当它强迫我滚动时。所以写了这个:
If _item.SubItems(pd.perioddate).Text = "N/A" Or _item.SubItems(pd.perioddate).Text = String.Empty Then
dtpDeadlineforAP.Checked = False
End If
是否有一种不错的方式来减轻它,使它更优雅?
答案 0 :(得分:5)
将_item.SubItems(pd.perioddate).Text
提取到局部变量中,例如
String text = _item.SubItems(pd.perioddate).Text
If text = "N/A" Or text = String.Empty Then
dtpDeadlineforAP.Checked = False
End If
或者,您可能希望将整个检查提取到单独的方法中:
If isNotFilled(_item.SubItems(pd.perioddate)) Then
dtpDeadlineforAP.Checked = False
End If
这将使代码更具可读性,并允许您重用检查逻辑。
答案 1 :(得分:1)
string obj = _item.SubItems(pd.perioddate).Text;
If obj = "N/A" Or obj = String.Empty Then
dtpDeadlineforAP.Checked = False
End If
同时强>
在visual studio中启用Word Warp以停止滚动。
转到
工具 - >选项 - >文字编辑器 - >所有语言 - > Word Warp
别忘了启用“显示所有设置”
答案 2 :(得分:1)
With _item.SubItems(pd.perioddate)
If .Text = "N/A" Or .Text = String.Empty Then
dtpDeadlineforAP.Checked = False
End If
End With
关于WITH的优点/罪恶的提示论点:)
答案 3 :(得分:1)
如果有多个字段可以包含N / A,我建议采用以下方法:
Dim invalidValues As String() = {"N/A", String.Empty}
If invalidValues.Contains(_item.SubItems(pd.perioddate).Text) Then
dtpDeadlineforAP.Checked = False
End If
或者,如果只是滚动,可以使用VB行继续符_
:
If _item.SubItems(pd.perioddate).Text = "N/A" _
Or _item.SubItems(pd.perioddate).Text = String.Empty Then
dtpDeadlineforAP.Checked = False
End If
顺便说一句:在这里,我建议OrElse
而不是Or
。
答案 4 :(得分:1)
我们至少应该提到Select Case
Select Case _item.SubItems(pd.perioddate).Text
Case "N/A", ""
dtpDeadlineforAP.Checked = False
End Select
还考虑提取辅助函数
Function IsNotApplicable(ByVal s As String) As Boolean
Return (s = "N/A") Or (s = "")
End Function
答案 5 :(得分:0)
Dim date as String = _item.SubItems(pd.perioddate).Text
If date = "N/A" Or date = String.Empty Then
dtpDeadlineforAP.Checked = False
End If
答案 6 :(得分:0)
正如其他人建议的那样,您可以使用局部变量。您还可以使用line continuation字符_
来缩短该行。
String period = _item.SubItems(pd.perioddate);
If period = "N/A" Or _
period = String.Empty Then
dtpDeadlineforAP.Checked = False
End If
答案 7 :(得分:0)
我会假设一个Helper Class或ExtensionMethod:
If StringIsNullOrEmptyOrNA(stringval) Then
...
End If
If stringval.IsNullOrEmptyOrNa() Then
....
End If
Public Function StringIsNullOrEmptyOrNA(ByVal input as String) as Boolean
return String.IsNullOrEmpty(input) OrElse input.Equals("N/A")
End Function
<System.Runtime.CompilerServices.Extension()>
Public Function IsNullOrEmptyOrNa(ByVal input As String)
return String.IsNullOrEmpty(input) OrElse input.Equals("N/A")
End Sub
答案 8 :(得分:0)
我把它归结为3行和63列。我已使用较新的If construct替换了传统的If operator。该代码还将处理Text
为空引用的情况,并使用OrElse
运算符进行短路。如果你愿意宣布一些扩展方法,你可以把它简化为一条短线,但这与我的答案精神相冲突。
Dim tx = _item.SubItems(pd.perioddate).Text
Dim dtp = dtpDeadlineforAP
dtp.Checked = If(tx = "N/A" OrElse tx = "", False, dtp.Checked)