Skip to main content
All docs
V22.2
  • CRR2007 - IIF function has identical result arguments

    • 2 minutes to read

    This analyzer detects the IIF ternary function in Visual Basic which has two identical arguments:

    Dim condition as Boolean;
    Dim a, b As Integer
    
    Dim result = IIf(condition, (a + b), (b + a))
    

    In this example, the IIF function returns the same result regardless of the condition. To fix this redundant expression, you can modify this code (for example, change one of the argument in the IIF function).

    In some cases, for example, when you need to read data from a database or some file, the IIF function can cause the side effect. For example, the code below produces the following results: value1 = 1, the first “ter.Expr()” value = 1, and the second “ter.Expr()” = 2:

    Namespace ConsoleApp
    
        Public Class Ternary
    
            Dim count As Integer
    
            Function Expr() As Integer
                count = count + 1
                Return count
            End Function
    
        End Class
    End Namespace
    
    Module Module1
    
    
        Sub Main()
    
            Dim ter As New Ternary()
    
            Dim value1 = IIf(True, ter.Expr(), ter.Expr())
    
        End Sub
    
    End Module
    

    The side effect can appear if you assign the “ter.Expr()” value to some variable and use it in your program. Unlike the If function, the IIF function calculates each result argument when it checks the condition. In the example above, IIF calls both “ter.Expr()” regardless of the return value.

    To avoid the side effect, change the ternary expression or use the IF function instead IIF.

    See Also