如何访问第一个LINQ元素?

时间:2013-03-04 20:24:15

标签: .net vb.net linq

执行此代码后:

Dim arr = From ctl In ContainerCtl.Controls.Cast(Of Control)()
            Select ctl
            Where (ctl.Enabled = True) AndAlso _
            (Not TypeOf ctl Is Label) AndAlso _
            (Not TypeOf ctl Is Panel) AndAlso _
            (Not TypeOf ctl Is GroupBox) AndAlso _
            (Not TypeOf ctl Is C1.Win.C1FlexGrid.C1FlexGrid AndAlso bSkipGrid)
            Order By ctl.TabIndex

如何访问第一个元素?我需要将其作为Control对象访问。

谢谢!

更新:使用First()或FirstOrDefault()永远不会起作用:

Error screen...

5 个答案:

答案 0 :(得分:3)

您需要在文件顶部添加以下内容:

using System.Linq;

然后您需要做的就是使用以下内容:

arr.First()

或者如果你的可枚举结果可能为零(这会导致上述内容抛出异常)。

arr.FirstOrDefault()

请确保在稍后的情况下检查null,请注意后者还有一个问题,即不说第一个对象何时是null,但这是另一天的问题。< / p>

答案 1 :(得分:0)

我不确定vb,但在c#中有一个arr.First()方法将返回第一个集合元素,或者你可以alfuy做arr.ToArray()[0]或arr.ToList()[0] < / p>

答案 2 :(得分:0)

你的陈述是否错误?不应该是:

Dim arr = From ctl In ContainerCtl.Controls.Cast(Of Control)()
        Where (ctl.Enabled = True) AndAlso _
        (Not TypeOf ctl Is Label) AndAlso _
        (Not TypeOf ctl Is Panel) AndAlso _
        (Not TypeOf ctl Is GroupBox) AndAlso _
        (Not TypeOf ctl Is C1.Win.C1FlexGrid.C1FlexGrid AndAlso bSkipGrid)
        Order By ctl.TabIndex
        Select ctl

然后致电

arr.First()

答案 3 :(得分:0)

最后我决定简单地使用For Each Loop并获取第一个有效元素。我从未弄清楚为什么First()从未奏效。我使用了所有提到的技术而没有运气。

感谢所有的建议!

答案 4 :(得分:0)

因为你有Option Infer Off。打开项目属性并设置Option Infer On或将Option Infer On添加到代码文件的顶部。