我知道拥有有意义的变量名是件好事,但在一个对象被短暂使用而不是丢弃它的情况下,将它包装在 With 语句中似乎是合理的。
考虑通过 Gridview 的行循环查找控件并更新它的示例情况。
For Each gvr as GridViewRow in gvExample.Rows
Dim txtExample as Textbox
txtExample = DirectCast(gvr.FindControl("txtExample"),Textbox)
txtExample.Text = "hi"
txtExample.Enabled = False
'... more with same object
next
这可以使用 With 编写而不创建局部变量:
For each gvr as GridViewRow in gvExample.Rows
With DirectCast(gvr.FindControl("txtExample"),Textbox)
.Text = "hi"
.Enabled = False
'... more with same object
End With
next
显然,还有以下妥协:
For Each gvr as GridViewRow in gvExample.Rows
Dim txtExample as Textbox
txtExample = DirectCast(gvr.FindControl("txtExample"),Textbox)
With txtExample
.Text = "hi"
.Enabled = False
'... more with same object
End With
next
为了论证起见,假设我知道gvr.FindControl("txtExample")
将始终返回一个文本框。
我偏爱第二种方法。我是否有理由避免使用With
这种方式?您提供的任何一种方式通常更好吗?如果是这样,为什么?