0

看起来这应该又快又容易,但我找不到实现它的语法,也没有任何成功的搜索。

我编写了一个程序,该程序从一个帐户中获取 3 个用户 ID,从另一个帐户中获取 3 个用户 ID,以比较帐户的所有权并允许某些权限,具体取决于所有权重叠。如果用户 ID 为空,则将“0”作为 UserID 的值,以避免字符串到长的转换问题。

按照目前写的,我测试了当UserID1匹配2UserID1,没有其他用户,程序正常运行。我还测试了 userID1 和 userID2 何时匹配 2userID1 和 2userID2,没有第三个用户,但它工作不正确。我有一种感觉 xxx = (yyy or zzz or uuu) 只看 yyy 而不会碰到其他值。有没有办法让 user1 将其值与 3 个不同的 2userIDx 值进行比较,而无需编写一系列 or 语句?我希望用下面的内容来简化代码。

       Dim userID1 As String = dr.GetString(1).Replace("-", "")
       Dim userID2 As String = dr.GetString(2).Replace("-", "")
       Dim userID3 As String = dr.GetString(3).Replace("-", "")
       Dim Account2 As String = dr.GetString(4)
       Dim 2userID1 As String = dr.GetString(5).Replace("-", "")
       Dim 2userID2 As String = dr.GetString(6).Replace("-", "")
       Dim 2userID3 As String = dr.GetString(7).Replace("-", "")

                  If userID1 = (2userID1 Or 2userID2 Or 2userID3) And userID2 = (2userID1 Or 2userID2 Or 2userID3) And userID3 = (2userID1 Or 2userID2 Or 2userID3)) Then
                    MessageBox.Show(fullACN.ToString + " and " + crACN.ToString + " can be crossed.")
                ElseIf (userID1 = (2userID1 Or 2userID2 Or 2userID3) And userID2 = (2userID1 Or 2userID2 Or 2userID3) And userID3 = "0") Then
                    MessageBox.Show(fullACN.ToString + " and " + crACN.ToString + " can be crossed.")
                ElseIf (userID1 = (2userID1 Or 2userID2 Or 2userID3) And userID2 = "0" And userID3 = "0") Then
                    MessageBox.Show(fullACN.ToString + " and " + crACN.ToString + " can be crossed.")
                Else
                    MessageBox.Show(fullACN.ToString + " and " + crACN.ToString + " cannot be crossed.")
                End If

            End If
4

4 回答 4

1

变量的开头不能有数字

您没有正确执行 If, insted of

userID1 = (2userID1 Or 2userID2 Or 2userID3)

它应该是

(userID1 = 2userID1 Or userID1 = 2userID2 Or userID1 = 2userID3)

如果您不想做很多 Or,则必须将值放入数组中

Dim dbValue As New List(Of String)

dbValue.Add(dr.GetString(5).Replace("-", ""))
dbValue.Add(dr.GetString(6).Replace("-", ""))
dbValue.Add(dr.GetString(7).Replace("-", ""))

If dbValues.Contains(userID1) Then
于 2013-05-31T14:04:47.817 回答
0

我修改并搜索了 Vishal 的帖子,最后混合使用了 OrElse 和 AndAlso 语句。这是我最终得到的结果,并且在前 20 次测试中返回了正确的结果。感谢 Andrew Mortan 和 the_Lotus 的投入。我不想使用数组,以便在需要时轻松获取变量。我需要为将来使用数组而努力。

If ((userid1 = user2id1 OrElse userid1= user2id2 OrElse userid1= user2id3) AndAlso (userid2= user2id2 OrElse userid2= user2id1 OrElse userid2= user2id3) AndAlso (userid3= user2id3OrElse userid3= user2id1 OrElse userid3= user2id2)) Then
                    MessageBox.Show(fullACN.ToString + " and " + crACN.ToString + " can be crossed.")
                ElseIf ((userid1= user2id1 OrElse userid1= user2id2 OrElse mbrssn = user2id3) AndAlso (userid2= user2id2 OrElse userid2= user2id1 OrElse userid2= user2id3) AndAlso (userid3= "0")) Then
                    MessageBox.Show(fullACN.ToString + " and " + crACN.ToString + " can be crossed.")
                ElseIf ((userid1= user2id1 OrElse userid1= user2id2 OrElse userid1= user2id3) AndAlso (userid2= "0") AndAlso (userid3= "0")) Then
                    MessageBox.Show(fullACN.ToString + " and " + crACN.ToString + " can be crossed.")
                Else
                    MessageBox.Show(fullACN.ToString + " and " + crACN.ToString + " cannot be crossed.")
                End If
于 2013-05-31T16:39:22.170 回答
0

我认为这就是你想要的:

Dim user1 As New List(Of String)
Dim user2 As New List(Of String)

For i = 1 To 3
    user1.Add(dr.GetString(i).Replace("-", ""))
Next

Dim account2 As String = dr.GetString(4)

For i = 5 To 7
    user2.Add(dr.GetString(i).Replace("-", ""))
Next

If user1.Intersect(user2).Count > 0 Then
    ' they have a common userID
End If
于 2013-05-30T19:29:27.607 回答
0

the_lotus 关于语法是正确的。您需要将比较分解为单独的 OR 语句。如果您真的想从代码中消除重复的 OR,您可以使用这样的 Select Case。此代码将返回“案例 2”

Dim str As String = "abc"
Select Case str
    Case "qwer", "wert", "erty"
        System.Console.WriteLine("Case 1")
    Case "xcvb", "abc"
        System.Console.WriteLine("Case 2")
    Case Else
        System.Console.WriteLine("Case 3")
End Select
于 2013-05-31T14:19:15.647 回答