VB.Net:如何测试多个值是否相等?

4
如何在一行中测试多个值是否相等? 基本上我想要做的是
if (val1 == val2 == val3 == ... valN)

但是在VB.Net中。
3个回答

8
If val1 = valN AndAlso val2 = valN AndAlso ... Then
End If

当测试的值超过几个时,这会变得繁琐。


1
如果你有许多值需要测试并且经常这样做,你可以编写一个类似这样的辅助函数:
Public Function AllTheSame(ByVal ParamArray values() As Object) As Boolean
    For index As Integer = 1 To values.Length - 1
        If values(0) <> values(index) Then Return False
    Next
    Return True
End Function

<Fact()> Public Sub testAllTheSame()
    Assert.True(AllTheSame("Test"))
    Assert.True(AllTheSame("Test", "Test"))
    Assert.True(AllTheSame("Test", "Test", "Test"))

    Assert.True(AllTheSame(1234))
    Assert.True(AllTheSame(1234, 1234, 1234))

    Assert.False(AllTheSame("Test", "Test2"))
    Assert.False(AllTheSame("Test", "Test", "Test3"))

    Assert.False(AllTheSame(1234, 1234, 987))
End Sub

1

无法像那样将它们链接在一起。您需要将其拆分为由AndAlso链接的成对比较。

if val1 = val2 AndAlso val2 = val3 AndAlso val1 = val3 Then

你不需要最后的比较:val1 = val3。 - Patrick McDonald
1
@Patrick,这是有争议的。如果您知道类型具有传递相等性,则可以排除val1 = val3。虽然对于大多数类型来说这是正确的,但我发现偶尔会出现由于1)显式疯狂或2)相等性中的错误而失败的比较。 - JaredPar
@Jared,说得好,如果N变得非常大,我也不想写条件语句 :) - Patrick McDonald
@Patrick,理想情况下,每个人都应该以可传递的方式实现相等性,这样我们就不必担心这个问题了 :) - JaredPar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接