1

执行此代码后:

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() 永远不会起作用:

错误画面...

4

5 回答 5

3

您需要在文件顶部包含以下内容:

using System.Linq;

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

arr.First()

或者,如果您的可枚举结果可能为零(这将导致上述引发异常)。

arr.FirstOrDefault()

确保在后一种情况下检查null,请注意,后者也存在不说第一个对象何时null是 的问题,但这是另一天的问题。

于 2013-03-04T20:25:00.727 回答
0

最后,我决定简单地使用 For Each 循环并获取第一个有效元素。我从来没有弄清楚为什么 First() 从来没有工作过。我使用了所有提到的技术,但没有运气。

感谢所有的建议!

于 2013-03-05T16:56:30.217 回答
0

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

于 2013-03-05T18:54:40.340 回答
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()

于 2013-03-04T22:15:24.010 回答
0

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

于 2013-03-04T20:26:45.873 回答