vb.net-使用或与equals一起比较一个变量的值与其他3个变量的值

vb.net-使用或与equals一起比较一个变量的值与其他3个变量的值,vb.net,equals,Vb.net,Equals,这似乎应该是快速和简单的,但我找不到语法,使它发生,并没有任何成功的搜索 我编写了一个程序,从一个帐户获取3个用户ID,从另一个帐户获取3个用户ID,以比较帐户的所有权,并根据所有权重叠允许某些权限。如果用户ID为null,则将0作为用户ID的值,以避免字符串到长字符串的转换问题 正如目前编写的那样,我已经测试了UserID1何时匹配2UserID1,并且没有其他用户,并且程序工作正常。我还测试了userID1和userID2何时匹配2userID1和2userID2,没有第三个用户,但它工作不

这似乎应该是快速和简单的,但我找不到语法,使它发生,并没有任何成功的搜索

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

正如目前编写的那样,我已经测试了UserID1何时匹配2UserID1,并且没有其他用户,并且程序工作正常。我还测试了userID1和userID2何时匹配2userID1和2userID2,没有第三个用户,但它工作不正确。我有一种感觉,xxx=yyy或zzz或uuu只是在看yyy,而没有碰撞到其他值。有没有一种方法可以让user1在不编写一系列or语句的情况下将其值与3个不同的2userIDx值进行比较?我希望用下面的代码来简化代码

       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

我想这就是你想要的:

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

变量开头不能有数字

您没有正确地执行If,而不是

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

莲花的语法是正确的。您需要将比较分解为单个或多个语句。如果您真的想从代码中消除重复的ORs,可以使用这样的Select案例。此代码将返回案例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

我修改并搜索了Vishal的帖子,最后使用了OrElse和AndAlso的混合语句。以下是我的结论,并且在前20个测试中返回了正确的结果。感谢Andrew Mortan和_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

你到底是怎么让它让你用数字开始变量名的?此外,如果您使用Option Strict On,它会指出代码中的一些问题,这可能会导致您找到解决方案。实际上,我用这些替换了我的真实变量名,所以它不允许使用。我确实选中了option strict on,它显示了到long的转换,如果option strict处于关闭状态,这是一种自动转换。这不应该导致这不起作用。我认为问题在于括号内的or语句,但我不确定是否有更好的方法。我希望避免写下加号或减号20和/或语句,如果我不能让类似的东西发挥作用,这将是必需的。其他信息-我测试了两个帐户,共享相同的主用户ID,没有其他用户。该程序从第二条ElseIf语句中弹出消息框,当它从第一条if语句中实际生成true时,使我怀疑ands是否是未按预期工作的部分。使用OrElse而不是Or。谢谢Vishal!成功了!这可能有效,但Vishal使用OrElse的解决方案是一个更快的改变。@David不能使用Option Strict On,因为OrElse b要求a和b是布尔值,而不是字符串。如果没有它,你会得到不正确的结果。事实证明OrElse并没有像我想象的那样工作@安德鲁,你说得对,它返回了不正确的结果。大约一小时前,在阅读你的帖子之前,我就知道你说了什么。我也发布了我的答案。