Contando ocurrencias en Array

Estoy contando la ocurrencia de cada elemento en la matriz, pero aparece el error "El valor no puede ser nulo" Esto no tiene sentido para mí porque arr1 está completamente poblado sin valores nulos, excepto los últimos 5 elementos que son nulos.

Aquí está mi código. Estoy usando el diccionario por primera vez, así que puedo tener algún error lógico en algún lugar. Estoy leyendo de un archivo de texto.

string[] arr1 = new string[200];
StreamReader sr = new StreamReader("newWorkSheet.txt");
string Templine1 = "";
int counter = 0;
while (Templine1 != null)
{
    Templine1 = sr.ReadLine();
    arr1[counter] = Templine1;
    counter += 1;
}
sr.Close();

// Dictionary, key is number from the list and the associated value is the number of times the key is found
Dictionary<string, int> occurrences = new Dictionary<string, int>();
// Loop test data
foreach (string value in arr1)
{
    if (occurrences.ContainsKey(value)) // Check if we have found this key before
    {
        // Key exists. Add number of occurrences for this key by one
        occurrences[value]++;
    }
    else
    {
        // This is a new key so add it. Number 1 indicates that this key has been found one time
        occurrences.Add(value, 1);
    }
}

// Dump result
System.IO.StreamWriter sr2 = new System.IO.StreamWriter("OrganizedVersion.txt");
foreach (string key in occurrences.Keys)
{
    sr2.WriteLine("Integer " + key.ToString() + " was found " + occurrences[key].ToString() + " times");
}
sr2.Close();
Console.ReadLine();

Edición: Pongo todo el código aquí incluida la declaración.

Respuestas a la pregunta(4)

Su respuesta a la pregunta