1

非常简单的问题,如何将 and or 运算符组合到同一个语句中。

c.GetType 是 getType(TextBox) AND foo 或 bar 或 baz

这是行不通的

For Each c As Control In Me.Controls
    If (c.GetType Is GetType(TextBox)) And ((c.Name <> "txtID") Or (c.Name <> "txtAltEmail")) Then
        'do something
    End If
Next

这有效:

For Each c As Control In Me.Controls
    If (c.GetType Is GetType(TextBox)) And (c.Name <> "txtID") Then
        'do something
    End If
Next

谢谢,我是.net 新手!

4

2 回答 2

2

顺便说一句,您可以使用 LINQ 来提高清晰度。:

Dim allTextBoxes = From txt In Me.Controls.OfType(Of TextBox)()
                  Where txt.Name <> "txtID" AndAlso txt.Name <> "txtAltEmail"
For Each txt In allTextBoxes
    ' do something with the TextBox '
Next
  • OfType仅返回给定类型的控件,在本例中为 TextBoxes
  • Where按属性过滤控件Name(注意:AndAndAlso差异
  • For Each迭代结果IEnumerable(Of TextBox)
于 2012-07-11T21:50:10.517 回答
1

从数学的角度来看,您的第一个陈述没有意义。表达方式

X <> A or X <> B

将始终返回true(鉴于 ,A <> B在您的情况下满足自"txtID" <> "txtAltEmail")。

(如果X = A,第二个子句为真。如果X = B,第一个子句为真。如果X是别的,两个子句都为真。)

你可能打算写的是

If (TypeOf c Is TextBox) AndAlso (c.Name <> "txtID") AndAlso (c.Name <> "txtAltEmail") Then

或者

If (TypeOf c Is TextBox) AndAlso Not ((c.Name = "txtID") OrElse (c.Name = "txtAltEmail")) Then

这在逻辑上是等价的。

(我还冒昧地将您的类型检查更改为更优雅的变体,并将 And/Or 替换为更有效的对应项。)

于 2012-07-11T22:07:06.437 回答