## Why is this an issue?

Most checks against an IndexOf value compare it with -1 because 0 is a valid index.

    strings.IndexOf(someString) = -1  ' Test for "index not found"
    strings.IndexOf(someString) < 0   ' Test for "index not found"
    strings.IndexOf(someString) >= 0  ' Test for "index found"

Any checks which look for values `> 0` ignore the first element, which is likely a bug. If the intent is merely to check the inclusion of a value in a `String`, `List`, or array, consider using the Contains method instead.

    strings.Contains(someString) ' Boolean result

This rule raises an issue when the output value of any of the following methods is tested against `> 0`:

- IndexOf, applied to `String`, list or array
- IndexOfAny, applied to a `String`
- LastIndexOf, applied to a `String`, list or array
- LastIndexOfAny, applied to a `String`

    someArray.IndexOf(someItem) > 0        ' Noncompliant: index 0 missing
    someString.IndexOfAny(charsArray) > 0  ' Noncompliant: index 0 missing
    someList.LastIndexOf(someItem) > 0     ' Noncompliant: index 0 missing
    someString.LastIndexOf(charsArray) > 0 ' Noncompliant: index 0 missing

## How to fix it

### Code examples

#### Noncompliant code example

    Dim Color As String = "blue"
    Dim Name As String = "ishmael"

    Dim Strings As New List(Of String)
    Strings.Add(Color)
    Strings.Add(Name)
    Dim StringArray As String() = Strings.ToArray()

    If Strings.IndexOf(Color) > 0 Then ' Noncompliant
      ' ...
    End If

    If Name.IndexOf("ish") > 0 Then ' Noncompliant
      ' ...
    End If

    If Name.IndexOf("ae") > 0 Then ' Noncompliant
      ' ...
    End If

    If Array.IndexOf(StringArray, Color) > 0 Then ' Noncompliant
      ' ...
    End If

#### Compliant solution

    Dim Color As String = "blue"
    Dim Name As String = "ishmael"

    Dim Strings As New List(Of String)
    Strings.Add(Color)
    Strings.Add(Name)
    Dim StringArray As String() = Strings.ToArray()

    If Strings.IndexOf(Color) > -1 Then
      ' ...
    End If

    If Name.IndexOf("ish") >= 0 Then
      ' ...
    End If

    If Name.Contains("ae") Then
      ' ...
    End If

    If Array.IndexOf(StringArray, Color) >= 0 Then
      ' ...
    End If

## Resources

### Documentation

- String.Contains Method
- String.IndexOfAny Method
- String.LastIndexOf Method
- String.LastIndexOfAny Method