Asp.net 使用With语句而不是创建对象引用
我知道拥有有意义的变量名是很好的,但是在一个对象被短暂使用而不是扔掉的情况下,将其包装在With语句中似乎是合理的 考虑在Gridview的行中循环查找控件并更新它的示例情况Asp.net 使用With语句而不是创建对象引用,asp.net,vb.net,Asp.net,Vb.net,我知道拥有有意义的变量名是很好的,但是在一个对象被短暂使用而不是扔掉的情况下,将其包装在With语句中似乎是合理的 考虑在Gridview的行中循环查找控件并更新它的示例情况 For Each gvr as GridViewRow in gvExample.Rows Dim txtExample as Textbox txtExample = DirectCast(gvr.FindControl("txtExample"),Textbox) txtExample.Tex
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
对于sake参数,假设我知道gvr.FindControl(“txtExample”)
将始终返回一个文本框
我更喜欢第二种方法。我是否有理由不这样使用
和
?您提供的任何一种方式总体上都更好吗?若然,原因为何 因为第二个和第三个方法编译为基本相同的IL,所以差异可能只是一个方便:在Visual Studio 2010中,第三个方法(但不是第二个)允许您检查txtExample
,.Text
,和。只需将鼠标悬停在这些标识符上,即可使用调试器启用。因为第二个和第三个方法编译为基本相同的IL,所以差异可能只是方便的一个方面:在Visual Studio 2010中,第三个方法(而不是第二个)允许您检查txtExample
,.Text
,和.Enabled
,只需将鼠标悬停在这些标识符上即可使用调试器进行调试。我不选择上述任何一项
尽管有很多单字母变量被恶意攻击,但这仍将提供至少与带有
关键字的相同的上下文,因此应被视为一种改进。在实践中,我可能会使用两个或三个字母的助记符。添加一个quick Select()linq投影,结果如下:
Dim boxes = gvExample.Rows.Cast(Of GridViewRow).Select(Function(gvr) gvr.FindControl("txtExample"))
For Each e as TextBox in boxes
e.Text = "hi"
e.Enabled = False
'... more with same object
Next
不需要DirectCast()操作符:由As TextBox
子句处理。新的选项推断
意味着没有类型的Dim
行仍然是类型安全的。
尽管有很多单字母变量被恶意攻击,但这仍将提供至少与带有
关键字的相同的上下文,因此应被视为一种改进。在实践中,我可能会使用两个或三个字母的助记符。添加一个quick Select()linq投影,结果如下:
Dim boxes = gvExample.Rows.Cast(Of GridViewRow).Select(Function(gvr) gvr.FindControl("txtExample"))
For Each e as TextBox in boxes
e.Text = "hi"
e.Enabled = False
'... more with same object
Next
不需要DirectCast()操作符:由As TextBox
子句处理。新的选项推断
意味着没有类型的Dim
行仍然是类型安全的。最后尝试实现此操作并收到错误:'select'不是'System.Web.UI.WebControls.GridViewRowCollection'的成员。
显然,正确的语法是gvExample.Rows.Cast(GridViewRow的).Select…
除非有我不熟悉的技巧。最后尝试实现此操作并收到错误:“Select”不是“System.Web.UI.WebControls.GridViewRowCollection”的成员。
显然,正确的语法是gvExample.Rows.Cast(GridViewRow的)。选择…
,除非有我不熟悉的技巧。