Erstellen und verwenden Sie eine benutzerdefinierte Liste<T> in C#

Ich versuche, verwenden Sie eine benutzerdefinierte Liste waren, die ich Hinzugefügt haben ein paar zusätzliche tools. Ich möchte diese Liste für eine lange Liste der benutzerdefinierten Klassen, die ich erstellt habe. Alle Klassen haben eine ID-Nummer und einige der Werkzeuge, die in der Liste mit der ID.

Hier ist ein Teil von meinem code, den ich versuche zu verwenden. Ich hoffe, dies hilft, Sie verstehen mein problem.

namespace Simple_Point_of _Sales_System
{
    public class MyList<T> : List<T>
    {
        internal int SetID()
        {
            return this.Max(n => n.ID) + 1;
        }
        internal T Find(int ID)
        {
            return this.Find(n => n.ID == ID);
        }
        internal T Add(T n)
        {
            Read();
            Add(n);
            Write();
            return n;
        }
        internal void Remove(int ID)
        {
            Read();
            if (this.Exists(t => t.ID == ID)) RemoveAll(t => t.ID == ID);
            else MessageBox.Show(GetType().Name + " " + ID + " does not exist.", "Missing Item", MessageBoxButtons.OK, MessageBoxIcon.Error);
            Write();
        }
        internal void Edit(int ID, T n)
        {
            Read();
            if (this.Exists(t => t.ID == ID)) this[FindIndex(t => t.ID == ID)] = n;
            else MessageBox.Show(GetType().Name + " " + ID + " does not exist.", "Missing Item", MessageBoxButtons.OK, MessageBoxIcon.Error);
            Write();
        }
        internal MyList<T> Read()
        {
            Clear();
            StreamReader sr = new StreamReader(@"../../Files/" + GetType().Name + ".txt");
            while (!sr.EndOfStream)
                Add(new T().Set(sr.ReadLine()));
            sr.Close();
            return this;
        }
        internal void Write()
        {
            StreamWriter sw = new StreamWriter(@"../../Files/" + GetType().Name + ".txt");
            foreach (T n in this)
                sw.WriteLine(n.ToString());
            sw.Close();
        }
    }

    public class Customer
    {
        public int ID;
        public string FirstName;
        public string LastName;
    }

    public class Item
    {
        public int ID { get; set; }
        public string Category { get; set; }
        public string Name { get; set; }
        public double Price { get; set; }
    }

    public class MyClass
    {
        MyList<Customer> Customers = new MyList<Customer>();
        MyList<Item> Items = new MyList<Item>();
    }
}
  • Seit Ihrer benutzerdefinierten Liste befasst sich nur mit dem Raum, warum nicht Sie erstellen Zimmer : List<Raum> statt?
  • Sie sollten mit Einschränkungen auf T, so stellen Sie sicher, nur um die Klassen, die eine ID-Feld oder eine Eigenschaft. Stellen Sie eine Schnittstelle erstellen, um dies durchzusetzen, wenn Sie nicht Erben. Aber was tun Sie eigentlich wissen wollen?
InformationsquelleAutor Makai | 2013-05-10
Schreibe einen Kommentar