C#: Как правильно прочитать и записать объекты в ArrayList?
Не стоит использовать ArrayListбез весомой на то необходимости. Поэтому компилятор не смог вас предупредить, что ArrayListсостоит из ArrayList'ов, в котором строки (двумерный массив строк), а не просто строк.
Вместо ArrayListнеобходимо использовать типизированный динамический массивList<string>.public void Click_OpenFile()
{
    string fileName = form1.OpenFie();

    IList<string[]> aL = ParseFile(fileName);

    foreach (var line in aL)
    {
        // Снова собираем токены в строки
        MessageBox.Show(string.Join(" ", line));
    }
}

// Читаем файл и построчно парсим его
private IList<string[]> ParseFile(string fileName)
{
    if (string.IsNullOrEmpty(fileName))
    {
        throw new ArgumentNullException(nameof(fileName));
    }
    if (!File.Exists(fileName))
    {
        throw new ArgumentException($"There is no file {fileName}!");
    }

    string[] fileContent = File.ReadAllLines(result);
    var aL = new List<string[]>(fileContent.Length);
    foreach (var line in fileContent)
    {
        aL.Add(ParseString(line));
    }
    return aL;
}

// Разбиваем строки на токены
private string[] ParseString(string s)
{
    const char delimiter = '|';
    return s.Split(delimiter);
}
в конце есть пример