Heim Backend-Entwicklung C#.Net-Tutorial Zusammenfassung der grundlegenden Verwendung der generischen C#-Liste List

Zusammenfassung der grundlegenden Verwendung der generischen C#-Liste List

Dec 19, 2016 pm 03:59 PM
泛型

Der Beispielcode lautet wie folgt:
namespace SampleListT
{
class Program
{
static void Main(string[] args)
{
//using System.Collections .Generic; List
//Verwenden von System.Collections; im Namespace ArrayList
//Beide implementieren Listensammlungen, eine ist eine generische Sammlung und die andere ist eine nicht generische Sammlung
//Als nächstes fügen wir das Person-Objekt zur Sammlung hinzu

Person p1 = new Person( "aladdin" , 20);
Person p2 = new Person("zhao", 10);
Person p3 = new Person("jacky", 40);

//Wenn die Containergröße der Liste nicht angegeben ist, ist der Standardwert 0. Solange ein Element hinzugefügt wird, wird es automatisch auf 4 erweitert . Wenn das fünfte Element hinzugefügt wird, wird es zu 8, und wenn das neunte hinzugefügt wird, wird es zu 16
//Es ist ersichtlich, dass es beim Erweitern immer wieder geöffnet werden muss Wenn die Anzahl der Elemente im Voraus bekannt ist oder möglich ist, ist es am besten, einen möglichst großen Kompromisswert anzugeben
//Wir fügen 3 Elemente hinzu und setzen die Containergröße auf 4 . Hinweis: Die Einstellung auf 4 bedeutet nicht, dass nur 4 Elemente platziert werden können. Es wird auch exponentiell erweitert. Dies dient nur dazu, den durch die Erweiterung verursachten Overhead zu maximieren ;Person>(4);

list.Add(p1);
list.Add(p2);
list.Add(p3);

//Diese Methode besteht darin, überschüssigen ungenutzten Speicherplatz zu löschen. Wenn die Zuordnungsgröße beispielsweise 100 beträgt, ist es nicht verschwenderisch, 4 zu verwenden und den Rest zu belassen? Wenn die Anzahl der Elemente mehr als 90 % der Behältergröße ausmacht, wird sie nicht recycelt.

list.TrimExcess();

//Die ArrayList-Methode wird genauso verwendet wie List<> Der Unterschied besteht darin, dass es sich um eine Sammlung von Objekten handelt und der Parameter Object ist ist die Möglichkeit des Ein- und Auspackens. Versuchen Sie, List zu verwenden Die Initialisierungsfunktion wird bereitgestellt, es gibt jedoch keine Antwort. In IL wird sie auch in die ADD-Methode konvertiert, um

List() { 1 ,2 , 3 ,4 ,5 };


// 2 Elemente hinzufügen AddRange() Diese Methode kann einen Stapel von Objekten auf einmal hinzufügen

List issues = new List(10 );
//Der Parameter ist ein Muss. Objekte, die gelöscht werden dürfen, können auch Arrays sein
list.AddRange( new Person[] { new Person( "aladdin" ,20) , new Person("zhao", 6)});

//Konstruiere und übergebe Batch-Parameter, der Effekt ist der gleiche wie AddRange
List(new Person> new Person( "aladdin" ,20) , new Person("zhao" ,6)});


// 3 Element einfügen
// Mit der Methode Insert() können Sie Fügen Sie ein Element an der angegebenen Position ein

// Wenn wir beispielsweise an Position 1 einfügen, ist es das letzte Es wurde Aladdin Jacky Zhao. Das Einfügen bedeutet, dass ich diese Position besetze. Die Person, die diese Position zuvor besetzt hat und derjenige nach ihm wird alle um eine Stelle zurückrücken

mylist.Insert( 1 , new Person( "jacky" , 88 ));

foreach (Person p in mylist)

{
Console.WriteLine(p.name);
}

// 4 Auf Elemente zugreifen

// ArrayList und List stellen beide Indexer für den Zugriff bereit
Console.WriteLine ( "----------------Zugriff auf Elemente-- -----------------------");

for (int i = 0; i < mylist.Count; i++)

{

Console.WriteLine(mylist[i].name);
}
//Sie können Verwenden Sie auch foreach, um dies zu implementieren, aber hier werden keine Beispiele angegeben

//Verwenden Sie die Foreach-Methode

//public Delegate void Action(T obj); Beispiel mit Delegat als Parameter
//Wir verwenden an einigen Stellen den Day-Ausdruck zur Implementierung
Console.WriteLine( "--- ---------------Verwenden Sie die ForEach-Methode zur Ausgabe------- ----------------------");

mylist.ForEach( param => Console.WriteLine(param.name) ) ;


// 5 Elemente löschen
//Elemente löschen können mit RemoveAt() Value direkt an den Indexer übergeben werden
//Das erste Element direkt löschen

mylist.RemoveAt(0 );

//Sie können das zu löschende Element auch an die Remove-Methode übergeben

List issues2 = new List(10);

Person per1 = new Person( "aladdin" , 100 );
Person per2 = new Person("zhao", 100);
Person per3 = new Person("jacky", 100);

lists2. Add(per1);

lists2.Add(per2);

lists2.Add(per3);


lists2 .Remove(per3);

Console.WriteLine( "- -----Gelöschtes Element---------");

foreach (Person pro in Listen2)
{
Console.WriteLine(per.name);
}
//Aus den Ergebnissen ist ersichtlich, dass das Element namens Jacky gelöscht wurde
//Sprechen wir über den Löschvorgang der Remove-Methode
// Verwenden Sie die IndexOf-Methode, um den Index des Objekts zu ermitteln, und löschen Sie es dann entsprechend dem Index
// In der IndexOf-Methode Überprüfen Sie zunächst, ob das Element die IEquatable-Schnittstelle implementiert. Wenn ja, rufen Sie einfach die Equals-Methode in dieser Schnittstelle auf
// Wenn sie nicht implementiert ist, rufen Sie die Equals-Methode in Object auf, um Elemente zu vergleichen (d. h. Adressvergleich)
// Oben haben wir per3 gelöscht, es ist offensichtlich, dass es eine Adresse gibt, also wurde sie gelöscht

// Als nächstes haben wir Person geändert und IEquatable implementiert. In der Vergleichsmethode wird immer false zurückgegeben. dann schlägt per3 den Vergleich fehl und wird nicht gelöscht
// Das Ergebnis ist, dass alle drei in
// Wenn Sie ein Objekt löschen möchten, löschen Sie es am besten direkt über den Index, da die Die Remove-Methode durchläuft eine Reihe von Prozessen, bevor sie schließlich gemäß dem Index löscht!

// RemoveRange() zum Löschen eines Bereichs
//Die zweite Zahl der Startposition des ersten Parameters
//lists2.RemoveRange( 1, 2);
//Console.WriteLine( "Nach der Stapellöschung----- -----------");

/ /foreach (Person pro in Listen2)
//{
// Console.WriteLine(per.name);
//}


// 6 Suche
// Es gibt viele Möglichkeiten zum Suchen. Sie können IndexOf LastIndexOf FindIndex FindLasIndex Find FindLas verwenden. Wenn Sie nur überprüfen möchten, ob das Element vorhanden ist, können Sie die Methode Exists() verwenden.
//Die Methode IndexOf() erfordert ein Objekt als Parameter. Wenn es getroffen wird, wird der Index des Elements in der Sammlung zurückgegeben. Wenn es nicht gefunden wird, kann IndexOf auch die IEquatable-Schnittstelle zum Vergleichen von Elementen verwenden

List< ;Person> ls3 = new List(10);

Person person1 = neue Person("aladdin", 100);
Person person2 = neue Person("zhao ", 100);
Person person3 = neue Person("jacky", 100);

ls3.Add(person1);
ls3.Add(person2);
ls3.Add (person3);

// Um ​​den Standard-Adressvergleich zu verwenden, entfernen wir vorübergehend die Person-Schnittstelle
int index = ls3.IndexOf(person3);
Console.WriteLine( "index of per3 :" + index) ; //2
// Sie können den Suchbereich auch so angeben, dass er ab dem 3. beginnt. Die Bereichslänge beträgt 1
int index2 = ls3.IndexOf(person3,2,1);
Console . WriteLine(index2);
//Die IEquatable-Vergleichsmethode wurde bereits geschrieben, es werden keine Beispiele angegeben

//Die FindIndex()-Methode wird verwendet, um nach Elementen mit bestimmten Eigenschaften zu suchen
/ / Beispiel: Verwenden Sie Delegaten als Parameter. public Delegate bool Predicate(T obj);

int index3 = ls3.FindIndex(param => param.name.Equals("jacky"));
Console. WriteLine( index3 );// 2
// FindLastIndex sucht nach dem ersten Element, das von hinten erscheint, und spiegelt nicht den Effekt wider, nur eines zu finden und dann anzuhalten.
int index4 = ls3.FindLastIndex(p => p.name.Equals("aladdin"));
Console.WriteLine(index4);
//Die Find-Methode wird genauso verwendet wie der FindIndex Methode, der Unterschied besteht darin, dass es das Element selbst ist.
Person ppp = ls3.Find( p => p.name.Equals("jacky")) ;
Console.WriteLine(ppp);

// if Um alle passenden Elemente zu finden, verwenden Sie die FindAll-Methode, anstatt anzuhalten, wenn Sie das erste finden.
// Wir finden alle Objekte, deren Alter 100 beträgt, und 3 davon stimmen überein
List newList = ls3. FindAll(p => p.age == 100);

Console.WriteLine( "----------Find all-- -------");

foreach (Person p in newList)
{
Console.WriteLine(p.name);
}


// 7 Sortierung
// Liste kann mit der Sort-Methode sortiert werden, und der Implementierungsalgorithmus ist Schnellsortierung
//Diese Methode weist mehrere Überladungen auf

//public void Sort() ; //Dies kann nur verwendet werden, wenn IComparable für die Elementmethode implementiert ist. Wenn es implementiert ist, können Sie sort einmal direkt aufrufen und die Reihenfolge wird sortiert
//public void Sort(ComparisonVergleich); Unsere Person implementiert diese Schnittstelle nicht, daher müssen wir eine generische Methode mit dem Typdelegaten als Parameter verwenden. T x, T y);
//public void Sort(int index, int count, IComparer Comparer); //Sie können den Bereich angeben

List ;Person>(10);

Person person4 = neue Person("aladdin", 100);

Person person5 = neue Person("zhao", 33);
Person person6 = neue Person ("jacky", 44);

ls4 .Add(person4);

ls4.Add(person5);
ls4.Add(person6);

ls4.Sort (MyComparFunc);

Console.WriteLine( "--- ----------sorted-------------");

foreach ( Person p in ls4)

{
Console .WriteLine(p.name+ p.age );
}

Console.WriteLine( "--------Umkehren Sie die Reihenfolge -------------- ----");

ls4.Reverse();

foreach (Person p in ls4)

{
Console.WriteLine(p.name+ p.age);
}


// 8 Typkonvertierung
//Sie können die Elemente in der Sammlung in jede Art von Elementen konvertieren. Beispielsweise möchten wir die Person in der Sammlung in ein Racer-Objekt umwandeln der Name und kein Alter
// public List ConvertAll(Converter Converter);
// public Delegate TOutput Converter(TInput input);
List((input) => new Racer(input.name)) ;

Console.WriteLine( "-------- --Converted Stuff--------");
foreach (Racer r in ls5)
{
Console.WriteLine(r.name);
}


// 9 Schreibgeschützte Sammlung
// Nachdem die Sammlung erstellt wurde, muss sie lesbar und beschreibbar sein. Andernfalls können keine neuen Elemente hinzugefügt werden ausgefüllt, keine Änderungen vornehmen.
// Sie können eine schreibgeschützte Sammlung verwenden, um den Typ ReadOnlyCollection<> zurückzugeben. aber sobald es eine Operation zum Ändern der Sammlung gibt, wird eine Ausnahme ausgelöst
// Er blockiert die üblichen ADD- und anderen Methoden

ReadOnlyCollection persss = ls5.AsReadOnly();

Console.WriteLine("Ausgabe schreibgeschützte Sammlung");

foreach (Racer r in persss)
{
Console.WriteLine(r.name);
}

Console.ReadLine();

}

//Delegierungsimplementierungsmethode zum Vergleich geschrieben
public static int MyComparFunc(Person p1, Person p2)
{
if (p1.age == p2.age)
{
return 0;
}
else if (p1.age > p2.age)
{
return 1;
}
else
{
return -1;
}
}
}

//zwei Hilfsklassen
class Person //:IEquatable
{
public string name;
public int age;

public Person( string name, int age)
{
this.name = name;
this.age = age;>
////Immer einen False-Wert angeben

//public bool Equals(Person other)

//{
// false zurückgeben ;
//}

}

class Racer

{

public string name;

public Racer(string name)

{

this.name= name;
}
}
}



Weitere verwandte Artikel über die Grundlegende Verwendungszusammenfassung der generischen C#-Liste Liste, bitte folgen Sie der chinesischen PHP-Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Lösen generische Funktionen das Problem der variadischen Parametertypen in Golang? Lösen generische Funktionen das Problem der variadischen Parametertypen in Golang? Apr 16, 2024 pm 06:12 PM

Generische Funktionen in Go lösen das Problem variadischer Typen: Generische Funktionen ermöglichen die Angabe von Typparametern zur Laufzeit. Dadurch ist es möglich, Funktionen zu schreiben, die Parameter unterschiedlichen Typs verarbeiten können. Beispielsweise ist die Max-Funktion eine generische Funktion, die zwei vergleichbare Parameter akzeptiert und den größeren Wert zurückgibt. Durch die Verwendung generischer Funktionen können wir flexibleren und allgemeineren Code schreiben, der verschiedene Parametertypen verarbeiten kann.

Spezifische Anwendungsszenarien von Generika in Golang Spezifische Anwendungsszenarien von Generika in Golang May 04, 2024 am 11:45 AM

Anwendungsszenarien von Generika in Go: Erfassungsvorgänge: Erstellen Sie Erfassungsvorgänge, die für jeden Typ geeignet sind, z. B. zum Filtern. Datenstrukturen: Schreiben Sie allgemeine Datenstrukturen wie Warteschlangen, Stapel und Karten, um verschiedene Datentypen zu speichern und zu bearbeiten. Algorithmen: Schreiben Sie allgemeine Algorithmen wie Sortieren, Suchen und Reduzieren, die verschiedene Datentypen verarbeiten können.

Was sind die Ober- und Untergrenzen von Java-Funktionsgenerika? wie benutzt man? Was sind die Ober- und Untergrenzen von Java-Funktionsgenerika? wie benutzt man? Apr 26, 2024 am 11:45 AM

Generische Java-Funktionen ermöglichen das Festlegen von Ober- und Untergrenzen. Extends gibt an, dass der von einer Funktion akzeptierte oder zurückgegebene Datentyp ein Untertyp des angegebenen Typs sein muss, z. B. Die untere Grenze (super) gibt an, dass der von einer Funktion akzeptierte oder zurückgegebene Datentyp ein Supertyp des angegebenen Typs sein muss, z. B. Die Verwendung von Generika verbessert die Wiederverwendbarkeit und Sicherheit des Codes.

Entdecken Sie die Vorteile und Einsatzmöglichkeiten von Generika in Golang Entdecken Sie die Vorteile und Einsatzmöglichkeiten von Generika in Golang Apr 03, 2024 pm 02:03 PM

Antwort: Golang-Generika sind ein leistungsstarkes Tool zur Verbesserung der Wiederverwendbarkeit, Flexibilität, Typsicherheit und Skalierbarkeit von Code. Detaillierte Beschreibung: Vorteile: Wiederverwendbarkeit des Codes: Gemeinsame Algorithmen und Datenstrukturen Flexibilität: Laufzeiterstellung von Instanzen bestimmter Typen Typsicherheit: Typprüfung zur Kompilierungszeit Erweiterbarkeit: Einfache Erweiterung und Anpassung Zweck: Gemeinsame Funktionen: Sortieren, Vergleich Gemeinsame Datenstrukturen wie Listen , Karten, Stapel usw. Typaliase: Typdeklarationen vereinfachen. Eingeschränkte Generika: Typsicherheit gewährleisten

Anwendung von Java-Generika in der Android-Entwicklung Anwendung von Java-Generika in der Android-Entwicklung Apr 12, 2024 pm 01:54 PM

Die Anwendung von Generika in der Android-Entwicklung verbessert die Wiederverwendbarkeit, Sicherheit und Flexibilität des Codes. Die Syntax besteht aus der Deklaration einer Typvariablen T, die zum Bearbeiten typparametrisierter Daten verwendet werden kann. Zu den in Aktion befindlichen Generika gehören benutzerdefinierte Datenadapter, die es dem Adapter ermöglichen, sich an jede Art von benutzerdefinierten Datenobjekten anzupassen. Android bietet außerdem generische Listenklassen (z. B. ArrayList) und generische Methoden, die die Manipulation von Parametern unterschiedlicher Typen ermöglichen. Zu den Vorteilen der Verwendung von Generika gehören die Wiederverwendbarkeit, Sicherheit und Flexibilität des Codes. Es muss jedoch darauf geachtet werden, die richtigen Grenzen anzugeben und diese in Maßen zu verwenden, um die Lesbarkeit des Codes sicherzustellen.

Welchen Einfluss haben Golang-Generika auf Funktionssignaturen und Parameter? Welchen Einfluss haben Golang-Generika auf Funktionssignaturen und Parameter? Apr 17, 2024 am 08:39 AM

Zu den Auswirkungen von Generika auf Go-Funktionssignaturen und -Parameter gehören: Typparameter: Funktionssignaturen können Typparameter enthalten, die die Typen angeben, die die Funktion verwenden kann. Typeinschränkungen: Typparameter können Einschränkungen haben, die Bedingungen angeben, die sie erfüllen müssen. Parametertyp-Inferenz: Der Compiler kann auf den Typ nicht spezifizierter Typparameter schließen. Angeben von Typen: Parametertypen können explizit angegeben werden, um generische Funktionen aufzurufen. Dies erhöht die Wiederverwendbarkeit und Flexibilität des Codes und ermöglicht Ihnen das Schreiben von Funktionen und Typen, die mit mehreren Typen verwendet werden können.

Welche Einschränkungen gibt es bei generischen Funktionen in Golang? Welche Einschränkungen gibt es bei generischen Funktionen in Golang? Apr 16, 2024 pm 05:12 PM

Einschränkungen der generischen Go-Funktionen: Es werden nur Typparameter unterstützt, Wertparameter werden nicht unterstützt. Funktionsrekursion wird nicht unterstützt. Typparameter können nicht explizit angegeben werden, sie werden vom Compiler abgeleitet.

Wie funktionieren Java-Enum-Typen mit Generika? Wie funktionieren Java-Enum-Typen mit Generika? May 04, 2024 am 08:36 AM

Die Kombination von Aufzählungstypen und Generika in Java: Wenn Sie eine Aufzählung mit Generika deklarieren, müssen Sie spitze Klammern hinzufügen, und T ist der Typparameter. Wenn Sie eine generische Klasse erstellen, müssen Sie auch spitze Klammern hinzufügen. T ist ein Typparameter, der jeden Typ speichern kann. Diese Kombination verbessert die Codeflexibilität, die Typsicherheit und vereinfacht den Code.

See all articles