我将Option Strict
和Option Infer
都设置为“开”。
以下代码工作正常:
Dim tBoxes = From t In MainForm.Frame2.Controls.OfType(Of TextBox).ToList
tBoxes.ToList().ForEach(Sub(c) c.DataBindings.Clear())
为什么我不能将它们合并到下面的一行中(我相信这与上面的第一行没有将tBoxes设置为列表而是保持IEnumerable
的事实有关,即使我调用ToList
,这是为什么?)
Dim tBoxes = From t In MainForm.Frame2.Controls.OfType(Of TextBox).ToList.ForEach(Sub(c) c.DataBindings.Clear())
此代码会导致错误
表达式不生成值
这可能看起来像是无事生非,但它不仅仅是减少到一行,我想了解这里发生了什么。
VB.NET 2010版
2条答案
按热度按时间5cg8jx4n1#
问题不在于
ToList
调用,而在于List.ForEach Method,它是Sub
,因此没有结果,不能赋给变量。如果要使用单行,请删除
Dim tBoxes =
。更新实际上在上面的代码中还有另一个问题。
相当于
所以很明显
tBoxes
是IEnumerable<TextBox>
。由于
from t In ..
部分在本例中是不必要的,因此“oneliner”应该如下所示如果您确实需要查询部分,为了避免这种混淆,不要忘记在调用
ToList
或其他方法(如Count
、Any
等)之前将其包含在(..)
中,如下所示u5rb5r592#
描述不多,但足以理解
问题是.ForEach不返回任何值,因此没有任何东西可以分配给您创建的tBoxes对象。它就像VB.net中的void方法或Sub。