Why Array.BinarySearch() giving negative numbers?
<p>I have some code that isn't making much sense to me. I have an array of strings and I'm using  a binary search to count them in a foreach() loop. The code is exactly the same both times I attempt output, other than sorting.  I'm not sure why I'm getting the results I'm getting. I assume it should just count the array values the same way both time. Any help?</p>

<p>Code:</p>

<pre><code>using System;
public class Driver {
    public static void Main(string [] args) {
        String [] s = {"Bob", "Jane", "Will", "Bill", "Liz"};

        Console.WriteLine("Before Sorting:\n----------");
        foreach(string item in s) {
            Console.WriteLine("{0}. {1}", Array.BinarySearch(s, item) + 1, item);
        }
        Console.WriteLine("Will is at position {0}", Array.BinarySearch(s, "Will") + 1);

        Console.WriteLine("\n\nAfter Sorting:\n----------");
        Array.Sort(s);
        foreach(string item in s) {
            Console.WriteLine("{0}. {1}", Array.BinarySearch(s, item) + 1, item);
        }
        Console.WriteLine("Will is at position {0}", Array.BinarySearch(s, "Will") + 1);
    }
}
</code></pre>

<p>Output:</p>

<pre><code>Before Sorting:
----------
1. Bob
2. Jane
3. Will
0. Bill
-2. Liz
Will is at position 3

After Sorting:
----------
1. Bill
2. Bob
3. Jane
4. Liz
5. Will
Will is at position 5
</code></pre>

<p>I'm sure it's something entirely stupid, but I can't figure it out.</p>
