基本上,不要尝试将文件作为文本行来处理;将其分开,这样您就有一段代码将该文本解析为类型化记录,然后在您只需要处理类型化数据时处理这些上游。
例如(在这里我假设文件是制表符分隔的,但您可以很容易地将其更改为列索引);看看我的方法需要做多少工作来处理数据:Main
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
static class Program
{
    static void Main()
    {
        foreach (var item in ReadFile("my.txt").OrderBy(x => x.Joined))
        {
            Console.WriteLine(item.Names);
        }
    }
    static readonly char[] tab = { '\t' };
    class Foo
    {
        public string Names { get; set; }
        public int Age { get; set; }
        public string Designation { get; set; }
        public DateTime Joined { get; set; }
    }
    static IEnumerable<Foo> ReadFile(string path)
    {
        using (var reader = File.OpenText(path))
        {
            // skip the first line (headers), or exit
            if (reader.ReadLine() == null) yield break;
            // read each line
            string line;
            var culture = CultureInfo.InvariantCulture;
            while ((line = reader.ReadLine()) != null)
            {
                var parts = line.Split(tab);
                yield return new Foo
                {
                    Names = parts[0],
                    Age = int.Parse(parts[1], culture),
                    Designation = parts[2],
                    Joined = DateTime.Parse(parts[3], culture)
                };
            }
        }
    }
}
这是一个仅使用 ISO-1 语言功能在 .NET 2.0(也可能在 .NET 1.1)上工作的版本(不是很优雅,但可以工作);我个人认为使用 .NET 1.1 会很愚蠢,如果您使用的是 .NET 2.0,那么List<T>将比 .NET 更可取ArrayList。但这是“最坏的情况”:
using System;
using System.Collections;
using System.Globalization;
using System.IO;
class Program
{
    static void Main()
    {
        ArrayList items = ReadFile("my.txt");
        items.Sort(FooByDateComparer.Default);
        foreach (Foo item in items)
        {
            Console.WriteLine(item.Names);
        }
    }
    class FooByDateComparer : IComparer
    {
        public static readonly FooByDateComparer Default
            = new FooByDateComparer();
        private FooByDateComparer() { }
        public int Compare(object x, object y)
        {
            return ((Foo)x).Joined.CompareTo(((Foo)y).Joined);
        }
    }
    static readonly char[] tab = { '\t' };
    class Foo
    {
        private string names, designation;
        private int age;
        private DateTime joined;
        public string Names { get { return names; } set { names = value; } }
        public int Age { get { return age; } set { age = value; } }
        public string Designation { get { return designation; } set { designation = value; } }
        public DateTime Joined { get { return joined; } set { joined = value; } }
    }
    static ArrayList ReadFile(string path)
    {
        ArrayList items = new ArrayList();
        using (StreamReader reader = File.OpenText(path))
        {
            // skip the first line (headers), or exit
            if (reader.ReadLine() == null) return items;
            // read each line
            string line;
            CultureInfo culture = CultureInfo.InvariantCulture;
            while ((line = reader.ReadLine()) != null)
            {
                string[] parts = line.Split(tab);
                Foo foo = new Foo();
                foo.Names = parts[0];
                foo.Age = int.Parse(parts[1], culture);
                foo.Designation = parts[2];
                foo.Joined = DateTime.Parse(parts[3], culture);
                items.Add(foo);
            }
        }
        return items;
    }
}