Heim > Backend-Entwicklung > C#.Net-Tutorial > So verwenden Sie die C#-Liste

So verwenden Sie die C#-Liste

高洛峰
Freigeben: 2016-12-15 15:26:29
Original
1543 Leute haben es durchsucht

Sammlungen sind ein wichtiges Konzept in OOP und die umfassende Unterstützung für Sammlungen in C# ist eine der Essenzen der Sprache.

Warum generische Sammlungen verwenden?

Vor C# 2.0 gab es zwei Hauptmöglichkeiten, Sammlungen zu implementieren:

a. Verwenden Sie ArrayList

, um Objekte direkt in ArrayList einzufügen Die Elemente sind vom Typ Object, daher müssen bei jeder Verwendung langwierige Typkonvertierungen durchgeführt werden.

b. Verwenden Sie eine benutzerdefinierte Sammlungsklasse

Ein gängiger Ansatz besteht darin, eine benutzerdefinierte Klasse von der abstrakten CollectionBase-Klasse zu erben und eine stark typisierte Sammlung durch Kapselung des IList-Objekts zu implementieren. Diese Methode erfordert das Schreiben einer entsprechenden benutzerdefinierten Klasse für jeden Sammlungstyp, was einen hohen Arbeitsaufwand erfordert. Das Aufkommen generischer Sammlungen hat die oben genannten Probleme besser gelöst. Es ist nur eine Codezeile erforderlich, um eine Sammlung eines bestimmten Typs zu erstellen.

Was sind Generika?

Generics sind ein neues Element in C# 2.0 (in C++ Templates genannt), das hauptsächlich zur Lösung einer Reihe ähnlicher Probleme verwendet wird. Dieser Mechanismus ermöglicht die Übergabe eines Klassennamens als Parameter an einen generischen Typ und die Erzeugung des entsprechenden Objekts. Es ist möglicherweise besser, sich Generika (einschließlich Klassen, Schnittstellen, Methoden, Delegaten usw.) als Vorlagen vorzustellen. Der Variantenteil in der Vorlage wird durch den als Parameter übergebenen Klassennamen ersetzt, wodurch eine neue Typdefinition erhalten wird. Generika sind ein relativ umfangreiches Thema und werden hier nicht im Detail analysiert. Interessierte können entsprechende Informationen einsehen.



Wie erstelle ich eine generische Sammlung?

Verwendet hauptsächlich die generische Klasse List unter dem Namespace System.Collections.Generic. Die Syntax lautet wie folgt:

Definieren Sie die Klasse Person wie folgt:

Wie Sie sehen, vereinfachen generische Sammlungen den Implementierungscode von Sammlungen erheblich, wodurch problemlos Sammlungen bestimmter Typen erstellt werden können. Darüber hinaus bieten generische Sammlungen auch leistungsfähigere Funktionen. Werfen wir einen Blick auf das Sortieren und Suchen.

List ListOfT = new List();

Das „T“ ist der zu verwendende Typ, der ein einfacher Typ sein kann, wie z. B. string, int, oder Es handelt sich um einen benutzerdefinierten Typ. Schauen wir uns unten ein konkretes Beispiel an.


class Person

{

private string _name; //Name

private int _age;

//Personenobjekt erstellen

öffentliche Person(string Name, int Age)

{

this._name= Name;

this._age = Age;

}

//Name

public string Name

{

get { return _name; }

}

//Alter

public int Age

{

get { return _age; }

}

}

//Personenobjekt erstellen

Person p1 = neue Person("Zhang San", 30);

Person p2 = neu Person("李思", 20);

Person p3 = new Person("王五", 50);

//Eine Sammlung von Objekten vom Typ Person erstellen

List personen = new List();

//Füge das Person-Objekt in die Sammlung ein

persons.Add(p1);

personen. Add(p2);

persons.Add(p3);

//Gib den Namen der zweiten Person aus

Console.Write(persons[1]. Name);

Sortieren von generischen Sammlungen

Die Sortierung basiert auf dem Vergleich. Es gibt beispielsweise zwei Zahlen, 1 und 2. Um sie zu sortieren, müssen Sie zunächst die beiden Zahlen vergleichen und anhand der Vergleichsergebnisse sortieren. Wenn Sie Objekte vergleichen möchten, ist die Situation etwas komplizierter. Beim Vergleich von Personenobjekten können Sie beispielsweise nach Namen oder Alter vergleichen, was die Festlegung der Vergleichsregeln erfordert. Ein Objekt kann über mehrere Vergleichsregeln verfügen, es kann jedoch nur eine Standardregel geben, die in der Klasse platziert wird, die das Objekt definiert. Die Standardvergleichsregeln werden in der CompareTo-Methode definiert, die zur generischen Schnittstelle IComparable gehört. Bitte schauen Sie sich den Code unten an:

class Person: IComparable

{

//Vergleiche nach Alter

public int CompareTo(Person p )

{

return this.Age - p.Age;

}

}

Der Parameter der CompareTo-Methode ist Zum Vergleich mit einem anderen Objekt desselben Typs ist der Rückgabewert vom Typ int. Wenn der Rückgabewert größer als 0 ist, bedeutet dies, dass das erste Objekt größer als das zweite Objekt ist Dies bedeutet, dass das erste Objekt kleiner als das zweite Objekt ist. Wenn die Rückgabe 0 ist, sind die beiden Objekte gleich.

Nachdem Sie die Standardvergleichsregeln definiert haben, können Sie die Sammlung über die Sortiermethode ohne Parameter sortieren, wie unten gezeigt:

//Sortieren Sie die Sammlung gemäß den Standardregeln

persons.Sort();

//Geben Sie den Namen des Besitzers aus

foreach (Person p in personen)

{

Console.WriteLine(p.Name); //Die Ausgabe Reihenfolge ist „Li Si“, „Zhang San“, „Wang Wu“

}

Im tatsächlichen Gebrauch ist es oft notwendig, Sätze nach vielen verschiedenen Regeln zu sortieren, was die Definition anderer erfordert Vergleichsregeln. Sie können in der Compare-Methode definiert werden, die zur generischen Schnittstelle IComparer gehört. Bitte sehen Sie sich den folgenden Code an:

Klasse NameComparer: IComparer

//Storage-Sorter-Instanz

public static NameComparer Default = new NameComparer();

//Nach Namen vergleichen

public int Compare(Person p1, Person p2)

{

return System.Collections.Comparer.Default.Compare(p1.Name, p2.Name);

}

}

Die Parameter der Compare-Methode sind zwei zu vergleichende Objekte desselben Typs, der Rückgabewert ist vom Typ int und die Verarbeitungsregeln für den Rückgabewert sind dieselben wie bei der CompareTo-Methode. Comparer.Default gibt unter anderem ein integriertes Comparer-Objekt zum Vergleichen zweier Objekte desselben Typs zurück.

Als nächstes verwenden Sie den neu definierten Komparator, um die Sammlung zu sortieren:

Sie können die Sammlung auch durch Delegation sortieren. Zuerst müssen Sie eine Methode für die Delegation definieren, um Vergleichsregeln aufzurufen. Sie können statische Methoden verwenden. Bitte schauen Sie sich den folgenden Code an: Sortieren Sie dann die Sammlung über den integrierten generischen Delegaten System.Comparison:

Sie können sehen, dass die beiden letztgenannten Methoden die Sammlung nach den angegebenen Regeln sortieren können, aber Der Autor Wenn Sie lieber die Delegationsmethode verwenden möchten, können Sie verschiedene Vergleichsregeln in einer Klasse unterbringen und diese dann flexibel aufrufen.

//Sammlung nach Namen sortieren

persons.Sort(NameComparer.Default);

//Alle Namen ausgeben

foreach (Person p in Personen)

{

Console.WriteLine(p.Name); //Die Ausgabereihenfolge ist „李思“, „王五“, „张三“

}class PersonComparison

{

//Vergleich nach Name

public static int Name(Person p1, Person p2)

{

Return system.Collections.comparer.Default.compare (p1.name, p2.name);

}

}>

Die Parameter der Methode müssen zwei Objekte von verglichen werden vom gleichen Typ, der Rückgabewert ist vom Typ int und die Verarbeitungsregeln für den Rückgabewert sind dieselben wie bei der CompareTo-Methode.

System.Comparison NameComparison = new System.Comparison(PersonComparison.Name);

persons.Sort(NameComparison);

//Alle ausgeben Personenname

foreach (Person p in personen)

{

Console.WriteLine(p.Name); //Die Ausgabereihenfolge ist „李思“, „王五" ","Zhang San"

}

Wie Sie sehen, können die beiden letztgenannten Methoden die Sammlung nach den angegebenen Regeln sortieren, der Autor bevorzugt jedoch die Delegationsmethode. Sie können erwägen, die einzelnen Vergleichsregeln in einer Klasse zu platzieren und sie dann flexibel aufzurufen.

Suche nach generischen Sammlungen

Bei der Suche geht es darum, Elemente aus der Sammlung zu finden, die bestimmte Bedingungen erfüllen. Es können mehrere Suchbedingungen definiert und nach Bedarf aufgerufen werden. Definieren Sie zunächst die Suchbedingungen wie folgt:

Klasse PersonPredicate

{

//Personen mittleren Alters (über 40 Jahre) finden

öffentlich static bool MidAge(Person p)

{

if (p.Age >= 40)

return true;

else

               return false; Item gibt true zurück, andernfalls gibt es false zurück.

System.Predicate MidAgePredicate = new System.Predicate(PersonPredicate.MidAge);

List MidAgePersons = personen.FindAll(MidAgePredicate);

//Alle Namen von Personen mittleren Alters ausgeben

foreach (Person p in MidAgePersons)

{

Console.WriteLine(p.Name); Ausgabe „Wang Wu“

} durchsucht dann die Sammlung über den integrierten generischen Delegaten System.Predicate:

Erweiterung der generischen Sammlung

Was sollten Sie tun, wenn Sie die Namen aller Personen in der Sammlung durch Kommas getrennt erhalten möchten?

Da die Funktionen, die eine einzelne Klasse bereitstellen kann, begrenzt sind, ist es naheliegend, über eine Erweiterung der List-Klasse nachzudenken. Bitte schauen Sie sich den folgenden Code an:

//Definieren Sie die Personensammlungsklasse

Klasse Personen: Liste

{

//Alle abrufen die Elemente in der Sammlung Name der Person

public string GetAllNames()

{

if (this.Count == 0)

return "";

String value = „“; 🎜>

}

                           return val.Substring(0, val.Length - 1); >

Persons PersonCol = new Persons();

PersonCol.Add(p1) ;

PersonCol.Add(p2);

PersonCol.Add(p3) ;

//Jeden Namen ausgeben

Console.Write(PersonCol. GetAllNames()); //Ausgabe „Zhang San, Li Si, Wang Wu“

Methoden und Attribute auflisten Methode oder Attributfunktion

Kapazität wird verwendet, um die Anzahl der Elemente abzurufen oder festzulegen die Liste kann Platz bieten. Dieser Wert erhöht sich automatisch, wenn die Menge die Kapazität überschreitet. Sie können diesen Wert festlegen, um die Kapazität zu reduzieren, oder die Methode trin() aufrufen, um die Kapazität so zu reduzieren, dass sie der tatsächlichen Anzahl von Elementen entspricht.

Count-Eigenschaft, wird verwendet, um die aktuelle Anzahl der Elemente im Array abzurufen.

Item() Ruft das Element durch Angabe des Index ab oder legt es fest. Für die List-Klasse handelt es sich um einen Indexer.

Öffentliche Methode Add() zum Hinzufügen eines Objekts zur Liste

Öffentliche Methode AddRange() zum Hinzufügen mehrerer Elemente, die die ICollection-Schnittstelle am Ende der Liste implementieren

BinarySearch( ) Überladene öffentliche Methode, die verwendet wird, um die binäre Suche zu verwenden, um das angegebene Element in der sortierten Liste zu finden

Clear( ) Alle Elemente in der Liste entfernen

Contains( ) Ein Element testen Ob es ist in der Liste

CopyTo() Überladene öffentliche Methode, kopiert eine Liste in ein eindimensionales Array

Exists() Testet, ob ein Element in der Liste ist

Find() Sucht das erste übereinstimmende Element in der Liste und gibt es zurück

FindAll() Sucht alle übereinstimmenden Elemente in der Liste und gibt es zurück

GetEnumerator() Überladene öffentliche Methode, gibt einen Enumerator zum Iterieren der Liste zurück

Getrange() Kopiert den angegebenen Bereich von Elementen in eine neue Liste

IndexOf() Überladene öffentliche Methode, um jedes passende Element zu finden und zurückzugeben. Index

Insert() Fügt ein ein Element in die Liste einfügen

InsertRange() Fügt eine Gruppe von Elementen in die Liste ein

LastIndexOf() Überladene öffentliche Methode, Suche Und gibt den Index des letzten übereinstimmenden Elements zurück

Remove( ) entfernt das erste Element, das mit dem angegebenen Element übereinstimmt

RemoveAt( ) entfernt das Element mit dem angegebenen Index

RemoveRange ( ) Entfernt die Elemente im angegebenen Bereich

Reverse ( ) Kehren Sie die Reihenfolge der Elemente in der Liste um

Sort( ) Sortieren Sie die Elemente in der Liste

ToArray( ) Kopieren Sie die Elemente in der Liste in ein neues Array

trimToSize( ) Setzt die Kapazität auf die tatsächliche Anzahl der Elemente in der Liste

Zusammenfassung:

Dieser Artikel konzentriert sich auf die Einführung in die Verwendung von C# Generics in 2.0 werden zum Implementieren von Sammlungen und zum Erweitern von Sammlungen verwendet Durch die ordnungsgemäße Verwendung generischer Sammlungen kann eine Menge sich wiederholender Arbeit reduziert und die Entwicklungseffizienz erheblich verbessert werden. Tatsächlich sind Sammlungen nur eine typische Anwendung von Generika. Wenn Sie mehr über Generika erfahren möchten, können Sie sich andere verwandte Informationen ansehen. Ich hoffe, dieser Artikel ist für Sie nützlich

Weitere Artikel zur Verwendung der C#-Liste finden Sie im PHP-Chinesisch Webseite!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage