Przejdź do treści stopki
POMOC .NET

Lista C# (jak to działa dla programistów)

Listy to wszechstronne i dynamiczne struktury danych używane do przechowywania i manipulowania zbiorami danych w języku C#. Są one częścią przestrzeni nazw System.Collections.Generic, która zapewnia szereg potężnych, bezpiecznych pod względem typów klas kolekcji oraz obiektów silnie typowanych. Ten przyjazny dla początkujących samouczek przeprowadzi Cię przez podstawy korzystania z list w języku C#, w tym sposób tworzenia/dodawania elementów, uzyskiwania dostępu do określonych indeksów lub pierwszych wystąpień, modyfikowania określonych elementów i usuwania elementów, a także przedstawi kilka typowych przypadków użycia.

Tworzenie list

Aby rozpocząć korzystanie z klasy List, należy najpierw dołączyć przestrzeń nazw System.Collections.Generic do kodu:

using System.Collections.Generic;
using System.Collections.Generic;
Imports System.Collections.Generic
$vbLabelText   $csharpLabel

Po dodaniu przestrzeni nazw generycznej utwórz nowy obiekt List, określając typ danych wszystkich elementów, które chcesz przechowywać w nawiasach kątowych (< >). Oto przykład tworzenia listy liczb całkowitych:

List<int> numbers = new List<int>();
List<int> numbers = new List<int>();
Dim numbers As New List(Of Integer)()
$vbLabelText   $csharpLabel

Można również zainicjować listę z pewnymi wartościami początkowymi lub zdefiniować ją na podstawie określonej kolekcji w następujący sposób:

List<string> fruits = new List<string> { "apple", "banana", "cherry" };
List<string> fruits = new List<string> { "apple", "banana", "cherry" };
Dim fruits As New List(Of String) From {"apple", "banana", "cherry"}
$vbLabelText   $csharpLabel

Możemy również określić domyślną początkową pojemność listy. Określona początkowa pojemność jest domyślną maksymalną pojemnością listy.

Metody listy

Dodawanie liczby elementów do listy

Aby dodać elementy do swojej listy, użyj metody Add():

numbers.Add(1);     // Adds first element
numbers.Add(2);
numbers.Add(3);
numbers.Add(1);     // Adds first element
numbers.Add(2);
numbers.Add(3);
numbers.Add(1) ' Adds first element
numbers.Add(2)
numbers.Add(3)
$vbLabelText   $csharpLabel

Można również dodać do listy szereg elementów z określonej kolekcji, korzystając z metody AddRange:

List<int> moreNumbers = new List<int> { 4, 5, 6 };
numbers.AddRange(moreNumbers);
List<int> moreNumbers = new List<int> { 4, 5, 6 };
numbers.AddRange(moreNumbers);
Dim moreNumbers As New List(Of Integer) From {4, 5, 6}
numbers.AddRange(moreNumbers)
$vbLabelText   $csharpLabel

Dostęp do elementów listy

Dostęp do poszczególnych elementów listy można uzyskać za pomocą indeksu, podobnie jak w przypadku tablic:

string firstFruit = fruits[0];          // "apple"
string secondFruit = fruits[1];         // "banana"
string firstFruit = fruits[0];          // "apple"
string secondFruit = fruits[1];         // "banana"
Dim firstFruit As String = fruits(0) ' "apple"
Dim secondFruit As String = fruits(1) ' "banana"
$vbLabelText   $csharpLabel

Należy pamiętać, że listy są indeksowane od zera, więc pierwszy element ma indeks 0. Powyższy przykład zapisze element w ciągu znaków, jeśli istnieje.

Modyfikowanie elementów listy

Aby zmodyfikować element na liście, wystarczy przypisać nową wartość do elementu o żądanym indeksie, pamiętając o indeksowaniu od zera:

fruits[1] = "blueberry";
fruits[1] = "blueberry";
fruits(1) = "blueberry"
$vbLabelText   $csharpLabel

Teraz drugim elementem na liście owoców jest "jagoda" zamiast "banan".

Usuwanie elementów z listy

Aby usunąć element z listy, można użyć metody Remove, która usuwa pierwsze wystąpienie określonego elementu:

fruits.Remove("apple");
fruits.Remove("apple");
fruits.Remove("apple")
$vbLabelText   $csharpLabel

Alternatywnie można użyć metody RemoveAt, aby usunąć element o określonym indeksie:

fruits.RemoveAt(0);
fruits.RemoveAt(0);
fruits.RemoveAt(0)
$vbLabelText   $csharpLabel

Aby usunąć wszystkie elementy z listy, użyj metody Clear:

fruits.Clear();
fruits.Clear();
fruits.Clear()
$vbLabelText   $csharpLabel

Wyszukiwanie elementów na liście

Możesz użyć metody Contains(), aby sprawdzić, czy lista zawiera określony element:

bool containsApple = fruits.Contains("apple");  // true
bool containsApple = fruits.Contains("apple");  // true
Dim containsApple As Boolean = fruits.Contains("apple") ' true
$vbLabelText   $csharpLabel

Aby znaleźć indeks pierwszego wystąpienia elementu, użyj metody IndexOf:

int appleIndex = fruits.IndexOf("apple");  // 0
int appleIndex = fruits.IndexOf("apple");  // 0
Dim appleIndex As Integer = fruits.IndexOf("apple") ' 0
$vbLabelText   $csharpLabel

Jeśli element nie zostanie znaleziony, IndexOf zwraca -1.

Przechodzenie przez listę

Aby iterować przez elementy listy, można użyć pętli foreach:

foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}
For Each fruit As String In fruits
	Console.WriteLine(fruit)
Next fruit
$vbLabelText   $csharpLabel

Alternatywnie można użyć pętli for z właściwością Count, która zwraca liczbę elementów na liście:

for (int i = 0; i < fruits.Count; i++)
{
    Console.WriteLine(fruits[i]);
}
for (int i = 0; i < fruits.Count; i++)
{
    Console.WriteLine(fruits[i]);
}
For i As Integer = 0 To fruits.Count - 1
	Console.WriteLine(fruits(i))
Next i
$vbLabelText   $csharpLabel

Sortowanie listy

Aby posortować listę w porządku rosnącym, należy użyć metody Sort:

List<int> unsortedNumbers = new List<int> { 5, 2, 8, 1, 4 };
unsortedNumbers.Sort();

// Now, unsortedNumbers is { 1, 2, 4, 5, 8 }
List<int> unsortedNumbers = new List<int> { 5, 2, 8, 1, 4 };
unsortedNumbers.Sort();

// Now, unsortedNumbers is { 1, 2, 4, 5, 8 }
Dim unsortedNumbers As New List(Of Integer) From {5, 2, 8, 1, 4}
unsortedNumbers.Sort()

' Now, unsortedNumbers is { 1, 2, 4, 5, 8 }
$vbLabelText   $csharpLabel

Aby posortować listę w porządku malejącym, można użyć metody Sort z niestandardowym porównaniem:

unsortedNumbers.Sort((a, b) => b.CompareTo(a));

// Now, unsortedNumbers is { 8, 5, 4, 2, 1 }
unsortedNumbers.Sort((a, b) => b.CompareTo(a));

// Now, unsortedNumbers is { 8, 5, 4, 2, 1 }
unsortedNumbers.Sort(Function(a, b) b.CompareTo(a))

' Now, unsortedNumbers is { 8, 5, 4, 2, 1 }
$vbLabelText   $csharpLabel

W przypadku bardziej złożonego sortowania można zaimplementować niestandardową klasę IComparer lub użyć LINQ (Language Integrated Query). Algorytm wyszukiwania binarnego działa na posortowanych listach.

Korzystanie z LINQ z listami

LINQ pozwala na wykonywanie zaawansowanych zapytań i transformacji na zbiorach, w tym listach. Aby użyć LINQ, musisz najpierw dołączyć przestrzeń nazw System.Linq do swojego kodu:

using System.Linq;
using System.Linq;
Imports System.Linq
$vbLabelText   $csharpLabel

Oto kilka przykładów zapytań LINQ dotyczących listy:

Filtrowanie listy

List<int> evenNumbers = numbers.Where(x => x % 2 == 0).ToList();
List<int> evenNumbers = numbers.Where(x => x % 2 == 0).ToList();
Dim evenNumbers As List(Of Integer) = numbers.Where(Function(x) x Mod 2 = 0).ToList()
$vbLabelText   $csharpLabel

Mapowanie (transformacja) elementów na liście

List<string> fruitNamesUpperCase = fruits.Select(x => x.ToUpper()).ToList();
List<string> fruitNamesUpperCase = fruits.Select(x => x.ToUpper()).ToList();
Dim fruitNamesUpperCase As List(Of String) = fruits.Select(Function(x) x.ToUpper()).ToList()
$vbLabelText   $csharpLabel

Wyszukiwanie wartości minimalnej i maksymalnej na liście

int minValue = numbers.Min();
int maxValue = numbers.Max();
int minValue = numbers.Min();
int maxValue = numbers.Max();
Dim minValue As Integer = numbers.Min()
Dim maxValue As Integer = numbers.Max()
$vbLabelText   $csharpLabel

Konwersja listy na tablicę

Aby przekonwertować listę na tablicę, można użyć metody ToArray:

int[] numbersArray = numbers.ToArray();
int[] numbersArray = numbers.ToArray();
Dim numbersArray() As Integer = numbers.ToArray()
$vbLabelText   $csharpLabel

Eksportowanie danych z listy do pliku PDF przy użyciu IronPDF

W tej sekcji pokażemy, jak wyeksportować dane z listy do pliku PDF przy użyciu biblioteki IronPDF. Może to być pomocne, gdy chcesz wygenerować raport lub wersję danych do wydruku.

Najpierw pobierz i zainstaluj pakiet IronPDF NuGet w swoim projekcie:

Install-Package IronPdf

Następnie dodaj przestrzeń nazw IronPdf do swojego kodu:

using IronPdf;
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

Teraz stwórzmy prostą funkcję, która konwertuje List ciągów znaków na tabelę HTML, a następnie eksportuje ją do pliku PDF:

using System.Collections.Generic;
using System.Text;
using IronPdf;

void ExportListToPdf(List<string> data, string pdfFilePath)
{
    // Create an HTML table from the list data
    StringBuilder htmlBuilder = new StringBuilder();
    htmlBuilder.Append("<table><tr><th>Item</th></tr>");

    foreach (string item in data)
    {
        htmlBuilder.Append($"<tr><td>{item}</td></tr>");
    }

    htmlBuilder.Append("</table>");

    // Convert the HTML table to a PDF using IronPDF
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());

    // Save the PDF to the specified file path
    pdf.SaveAs(pdfFilePath);
}
using System.Collections.Generic;
using System.Text;
using IronPdf;

void ExportListToPdf(List<string> data, string pdfFilePath)
{
    // Create an HTML table from the list data
    StringBuilder htmlBuilder = new StringBuilder();
    htmlBuilder.Append("<table><tr><th>Item</th></tr>");

    foreach (string item in data)
    {
        htmlBuilder.Append($"<tr><td>{item}</td></tr>");
    }

    htmlBuilder.Append("</table>");

    // Convert the HTML table to a PDF using IronPDF
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());

    // Save the PDF to the specified file path
    pdf.SaveAs(pdfFilePath);
}
Imports System.Collections.Generic
Imports System.Text
Imports IronPdf

Private Sub ExportListToPdf(ByVal data As List(Of String), ByVal pdfFilePath As String)
	' Create an HTML table from the list data
	Dim htmlBuilder As New StringBuilder()
	htmlBuilder.Append("<table><tr><th>Item</th></tr>")

	For Each item As String In data
		htmlBuilder.Append($"<tr><td>{item}</td></tr>")
	Next item

	htmlBuilder.Append("</table>")

	' Convert the HTML table to a PDF using IronPDF
	Dim renderer = New ChromePdfRenderer()
	Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlBuilder.ToString())

	' Save the PDF to the specified file path
	pdf.SaveAs(pdfFilePath)
End Sub
$vbLabelText   $csharpLabel

Aby skorzystać z tej funkcji, wystarczy wywołać ją, podając listę i ścieżkę do żądanego pliku PDF:

List<string> fruits = new List<string> { "apple", "banana", "cherry" };
ExportListToPdf(fruits, "Fruits.pdf");
List<string> fruits = new List<string> { "apple", "banana", "cherry" };
ExportListToPdf(fruits, "Fruits.pdf");
Dim fruits As New List(Of String) From {"apple", "banana", "cherry"}
ExportListToPdf(fruits, "Fruits.pdf")
$vbLabelText   $csharpLabel

Spowoduje to wygenerowanie pliku PDF o nazwie "Fruits.pdf" zawierającego tabelę z listą owoców poprzez konwersję HTML do PDF za pomocą IronPDF. Możesz zmodyfikować funkcję ExportListToPdf, aby dostosować ją do swoich potrzeb, na przykład dodając niestandardowe style do tabeli HTML lub dodatkową treść do pliku PDF.

Lista C# (Jak to działa dla programistów) Rysunek 1 — HTML do PDF

Wnioski

W tym przyjaznym dla początkujących samouczku omówiliśmy podstawy korzystania z list C# i pokazaliśmy, jak zintegrować IronPDF w celu eksportowania danych z listy do pliku PDF. Dzięki włączeniu IronPDF do swoich projektów można łatwo generować raporty, faktury lub inne dokumenty do druku z poziomu projektów C#.

IronPDF oferuje bezpłatną wersję próbną, która pozwala przetestować jego możliwości przed podjęciem decyzji o zakupie.

Często Zadawane Pytania

Jak moge stworzyc liste w C#?

Aby stworzyc liste w C#, nalezy uwzglednic przestrzen nazw System.Collections.Generic. Mozesz wtedy zadeklarowac liste, okreslajac typ danych w nawiasach trojkatnych. Na przyklad: List numbers = new List();

Jakie metody sa stosowane do dodawania elementow do listy w C#?

Elementy moga byc dodawane do listy C# przy uzyciu metody Add() dla pojedynczych elementow oraz AddRange() dla dodawania kolekcji elementow.

Jak moge zaexportowac liste C# do pliku PDF?

Aby zaexportowac liste C# do pliku PDF, mozna uzyc biblioteki IronPDF. Przeksztalc dane z listy w format tabeli HTML, a nastepnie wyrenderowac je jako PDF za pomoca IronPDF.

Jaki jest najlepszy sposob na sortowanie listy C#?

Mozesz posortowac liste C# w porzadku rosnacym, uzywajac metody Sort(). Aby posortowac w porzadku malejacym, mozesz uzyc Sort() z niestandardowym delegatem porownawczym.

Jak uzyskac dostep do elementow w liscie C#?

Elementy w liscie C# moga byc dostepne przy uzyciu ich indeksu, podobnie jak w tablicach. Listy sa indeksowane od zera, wiec mozesz uzyc pozycji elementu na liscie, aby go pobrac.

Jakie opcje sa dostepne do usuwania elementow z listy C#?

Mozesz usunac elementy z listy C# przy pomocy metody Remove() dla konkretnych elementow, RemoveAt() dla konkretnego indeksu, lub Clear() do usuniecia wszystkich elementow.

Jak mozna wykorzystac LINQ z listami C#?

LINQ mozna uzyc z listami C# do wykonywania poteznych zapytan i transformacji, takich jak filtrowanie, mapowanie i wyszukiwanie wartosci minimalnych lub maksymalnych w skuteczny sposob.

Jak moge konwertowac liste na tablice w C#?

Mozesz konwertowac liste C# na tablice za pomoca metody ToArray(), ktora tworzy nowa tablice zawierajaca elementy z listy.

Jakie sa niektóre typowe przypadki uzycia list C#?

Listy C# sa czesto uzywane do zarzadzania dynamicznymi kolekcjami danych, wykonywania zlozonych zapytan z LINQ, oraz generowania raportow lub dokumentów za pomoca takich bibliotek jak IronPDF.

Jak przebiegac przez elementy w liscie C#?

Mozesz przebiegac przez elementy w liscie C# uzywajac petli foreach do prostej iteracji lub petli for, gdy potrzebujesz indeksu.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie