Przejdź do treści stopki
POMOC .NET

C# Inicjalizacja listy (Jak to dziala dla programistow)

Listy są częścią przestrzeni nazw System.Collections.Generic i są wszechstronne w obsłudze zbiorów danych. Listy w języku C# są dynamiczne, co oznacza, że ich rozmiar może się zmieniać w czasie wykonywania. Ta elastyczność jest bardzo pomocna w wielu scenariuszach inżynierii oprogramowania, w których liczba elementów nie jest znana z góry. Przyjrzyjmy się różnym sposobom inicjalizacji listy w języku C#. Omówimy podstawowe techniki, składnię inicjalizatora obiektów, inicjalizatory kolekcji oraz bibliotekę IronPDF.

Inicjalizacja listy podstawowej

Aby zainicjować listę, należy najpierw utworzyć instancję klasy List<t>, gdzie T jest typem elementów na liście. Najpopularniejszym typem jest string, ale można użyć dowolnego typu.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Initialize an empty list
        List<string> fruits = new List<string>();

        // Adding elements to the list
        fruits.Add("Apple");
        fruits.Add("Banana");
        fruits.Add("Cherry");

        // Display the list
        foreach (var fruit in fruits)
        {
            Console.WriteLine(fruit);
        }
    }
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Initialize an empty list
        List<string> fruits = new List<string>();

        // Adding elements to the list
        fruits.Add("Apple");
        fruits.Add("Banana");
        fruits.Add("Cherry");

        // Display the list
        foreach (var fruit in fruits)
        {
            Console.WriteLine(fruit);
        }
    }
}
Imports System
Imports System.Collections.Generic

Friend Class Program
	Shared Sub Main()
		' Initialize an empty list
		Dim fruits As New List(Of String)()

		' Adding elements to the list
		fruits.Add("Apple")
		fruits.Add("Banana")
		fruits.Add("Cherry")

		' Display the list
		For Each fruit In fruits
			Console.WriteLine(fruit)
		Next fruit
	End Sub
End Class
$vbLabelText   $csharpLabel

W powyższym przykładzie utworzyliśmy pustą listę i dodaliśmy do niej elementy za pomocą metody Add. List<string> reprezentuje listę ciągów znaków, a do wypełnienia jej wartościami użyliśmy metody Add.

Korzystanie ze składni inicjalizatora kolekcji

Język C# oferuje bardziej zwięzły sposób inicjalizacji listy przy użyciu składni inicjalizatora kolekcji. Pozwala to na wypełnienie listy bezpośrednio po jej utworzeniu bez konieczności wielokrotnego wywoływania metody Add.

public void InitializeList()
{
    List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" };
}
public void InitializeList()
{
    List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" };
}
Public Sub InitializeList()
	Dim fruits As New List(Of String) From {"Apple", "Banana", "Cherry"}
End Sub
$vbLabelText   $csharpLabel

Ten kod osiąga ten sam wynik co poprzedni przykład, ale w bardziej zwięzłej formie. Inicjalizatory kolekcji pozwalają zainicjować listę wartości w jednym wyrażeniu, dzięki czemu kod staje się bardziej czytelny.

Inicjalizatory obiektów i inicjalizacja list

Składnia inicjalizatora obiektów to kolejny sposób inicjalizacji list, głównie podczas pracy z obiektami niestandardowymi. Oto przykład działania inicjalizatorów obiektów w przypadku list:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Person> people = new List<Person>
{
    new Person { Name = "John", Age = 30 },
    new Person { Name = "Jane", Age = 25 },
    new Person { Name = "Jack", Age = 35 }
};
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Person> people = new List<Person>
{
    new Person { Name = "John", Age = 30 },
    new Person { Name = "Jane", Age = 25 },
    new Person { Name = "Jack", Age = 35 }
};
Friend Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class

Private people As New List(Of Person) From {
	New Person With {
		.Name = "John",
		.Age = 30
	},
	New Person With {
		.Name = "Jane",
		.Age = 25
	},
	New Person With {
		.Name = "Jack",
		.Age = 35
	}
}
$vbLabelText   $csharpLabel

W tym przykładzie tworzymy listę obiektów Person przy użyciu inicjalizatorów obiektów. Klasa Person ma dwie właściwości: Name i Age, którym przypisuje się wartości w momencie tworzenia listy.

Tworzenie listy o początkowej wielkości

Chociaż listy mają dynamiczny rozmiar, można określić początkową pojemność, jeśli wiadomo, ile elementów będzie zawierała lista. Może to poprawić wydajność poprzez zmniejszenie liczby realokacji pamięci.

List<string> fruits = new List<string>(10); // Initial size of 10
List<string> fruits = new List<string>(10); // Initial size of 10
Dim fruits As New List(Of String)(10) ' Initial size of 10
$vbLabelText   $csharpLabel

Powoduje to utworzenie pustej listy o początkowej pojemności 10. Chociaż nie dodaje ona elementów, przydziela wystarczającą ilość pamięci, aby pomieścić do 10 elementów bez zmiany rozmiaru wewnętrznej tablicy.

Inicjalizacja listy z tablicy

Można również zainicjować listę z istniejącej tablicy, używając konstruktora listy, który przyjmuje argument IEnumerable<t>. Jest to przydatne, gdy masz tablicę i chcesz przekształcić ją w listę, aby uzyskać większą elastyczność.

// New String array of fruit
string[] fruitArray = { "Apple", "Banana", "Cherry" };
List<string> fruits = new List<string>(fruitArray);
// New String array of fruit
string[] fruitArray = { "Apple", "Banana", "Cherry" };
List<string> fruits = new List<string>(fruitArray);
' New String array of fruit
Dim fruitArray() As String = { "Apple", "Banana", "Cherry" }
Dim fruits As New List(Of String)(fruitArray)
$vbLabelText   $csharpLabel

W tym przypadku tworzona jest nowa tablica, która następnie służy do zainicjowania listy. Powoduje to przekształcenie tablicy fruitArray w listę. Dowolny element IEnumerable<t>, w tym tablice, można przekazać do konstruktora listy w celu jej zainicjowania.

Korzystanie z metody AddRange

Jeśli masz już zbiór elementów, możesz użyć metody AddRange, aby dodać wiele elementów do listy jednocześnie.

List<string> fruits = new List<string> { "Apple", "Banana" };
string[] moreFruits = { "Cherry", "Date", "Elderberry" };
fruits.AddRange(moreFruits);
List<string> fruits = new List<string> { "Apple", "Banana" };
string[] moreFruits = { "Cherry", "Date", "Elderberry" };
fruits.AddRange(moreFruits);
Dim fruits As New List(Of String) From {"Apple", "Banana"}
Dim moreFruits() As String = { "Cherry", "Date", "Elderberry" }
fruits.AddRange(moreFruits)
$vbLabelText   $csharpLabel

W tym przykładzie zaczynamy od listy zawierającej dwa elementy i dodajemy wiele nowych pozycji z tablicy za pomocą AddRange. Metoda ta może poprawić wydajność poprzez dodawanie elementów zbiorczo, ponieważ minimalizuje potrzebę wielokrotnego przydzielania pamięci.

Inicjalizacja listy z obiektami niestandardowymi

Podczas inicjalizacji listy obiektów niestandardowych można łączyć inicjalizatory obiektów z inicjalizatorami kolekcji, aby tworzyć złożone struktury danych w jednym wyrażeniu.

List<Person> people = new List<Person>
{
    new Person { Name = "Alice", Age = 28 },
    new Person { Name = "Bob", Age = 32 },
    new Person { Name = "Charlie", Age = 40 }
};
List<Person> people = new List<Person>
{
    new Person { Name = "Alice", Age = 28 },
    new Person { Name = "Bob", Age = 32 },
    new Person { Name = "Charlie", Age = 40 }
};
Dim people As New List(Of Person) From {
	New Person With {
		.Name = "Alice",
		.Age = 28
	},
	New Person With {
		.Name = "Bob",
		.Age = 32
	},
	New Person With {
		.Name = "Charlie",
		.Age = 40
	}
}
$vbLabelText   $csharpLabel

Technika ta pozwala na tworzenie i inicjalizację listy obiektów w jednym wyrażeniu, dzięki czemu kod jest zwięzły i łatwy do odczytania.

Inicjalizacja listy za pomocą metod rozszerzeń

Można również zaimplementować metodę rozszerzenia, aby zainicjować listę w niestandardowy sposób. Metody rozszerzeń zapewniają mechanizm ulepszania istniejących typów o nowe możliwości bez zmiany ich pierwotnej struktury.

public static class ListExtensions
{
    public static List<t> InitializeWith<t>(this List<t> list, params T[] elements)
    {
        list.AddRange(elements);
        return list;
    }
}

// Usage
List<string> fruits = new List<string>().InitializeWith("Apple", "Banana", "Cherry");
public static class ListExtensions
{
    public static List<t> InitializeWith<t>(this List<t> list, params T[] elements)
    {
        list.AddRange(elements);
        return list;
    }
}

// Usage
List<string> fruits = new List<string>().InitializeWith("Apple", "Banana", "Cherry");
Imports System.Collections.Generic

Public Module ListExtensions
    <System.Runtime.CompilerServices.Extension>
    Public Function InitializeWith(Of T)(list As List(Of T), ParamArray elements As T()) As List(Of T)
        list.AddRange(elements)
        Return list
    End Function
End Module

' Usage
Dim fruits As List(Of String) = New List(Of String)().InitializeWith("Apple", "Banana", "Cherry")
$vbLabelText   $csharpLabel

W tym miejscu definiujemy metodę rozszerzenia, InitializeWith, która dodaje elementy do listy i zwraca samą listę. Pozwala to na połączenie inicjalizacji i wypełniania listy.

IronPDF: biblioteka PDF dla języka C

Lista inicjalizacji C# (jak to działa dla programistów): Rysunek 1 — IronPDF: biblioteka PDF dla języka C#

Jeśli masz listę, na przykład listę owoców, możesz szybko przekształcić ją w tabelę HTML i wygenerować plik PDF za pomocą IronPDF — wszystko to za pomocą zaledwie kilku wierszy kodu. Proces jest prosty: zainicjuj swoją listę, przekonwertuj ją na HTML i pozwól IronPDF wygenerować plik PDF. Oto przykład:

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

class Program
{
    static void Main()
    {
        // Initialize a list of strings representing data
        List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" };

        // Convert the list to an HTML table
        StringBuilder htmlContent = new StringBuilder();
        htmlContent.Append("<table border='1'><tr><th>Fruit Name</th></tr>");
        foreach (var fruit in fruits)
        {
            htmlContent.Append($"<tr><td>{fruit}</td></tr>");
        }
        htmlContent.Append("</table>");

        // Render the HTML to PDF using IronPDF
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(htmlContent.ToString());

        // Save the PDF to a file
        PDF.SaveAs("FruitsList.pdf");
        Console.WriteLine("PDF generated successfully.");
    }
}
using IronPdf;
using System;
using System.Collections.Generic;
using System.Text;

class Program
{
    static void Main()
    {
        // Initialize a list of strings representing data
        List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" };

        // Convert the list to an HTML table
        StringBuilder htmlContent = new StringBuilder();
        htmlContent.Append("<table border='1'><tr><th>Fruit Name</th></tr>");
        foreach (var fruit in fruits)
        {
            htmlContent.Append($"<tr><td>{fruit}</td></tr>");
        }
        htmlContent.Append("</table>");

        // Render the HTML to PDF using IronPDF
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(htmlContent.ToString());

        // Save the PDF to a file
        PDF.SaveAs("FruitsList.pdf");
        Console.WriteLine("PDF generated successfully.");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Text

Friend Class Program
	Shared Sub Main()
		' Initialize a list of strings representing data
		Dim fruits As New List(Of String) From {"Apple", "Banana", "Cherry"}

		' Convert the list to an HTML table
		Dim htmlContent As New StringBuilder()
		htmlContent.Append("<table border='1'><tr><th>Fruit Name</th></tr>")
		For Each fruit In fruits
			htmlContent.Append($"<tr><td>{fruit}</td></tr>")
		Next fruit
		htmlContent.Append("</table>")

		' Render the HTML to PDF using IronPDF
		Dim Renderer = New ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf(htmlContent.ToString())

		' Save the PDF to a file
		PDF.SaveAs("FruitsList.pdf")
		Console.WriteLine("PDF generated successfully.")
	End Sub
End Class
$vbLabelText   $csharpLabel

Lista inicjalizacyjna w języku C# (jak to działa dla programistów): Rysunek 2 – Przykładowy wynik

Ten kod inicjuje listę, tworzy na jej podstawie tabelę HTML i wykorzystuje IronPDF do utworzenia pliku PDF. Jest to prosty i bezpośredni sposób generowania plików PDF na podstawie zbiorów danych.

Wnioski

Lista inicjalizacji w języku C# (jak to działa dla programistów): Rysunek 3 — strona licencyjna IronPDF

Inicjalizacja listy w języku C# to podstawowa koncepcja, którą powinien opanować każdy inżynier oprogramowania. Niezależnie od tego, czy pracujesz z prostymi listami ciągów znaków, czy złożonymi listami obiektów, język C# oferuje kilka metod pozwalających na wydajną inicjalizację i wypełnianie list. Od podstawowej inicjalizacji po inicjalizatory obiektów i kolekcji — techniki te pomagają pisać przejrzysty, zwięzły i łatwy w utrzymaniu kod.

IronPDF oferuje bezpłatną wersję próbną, która pozwala wypróbować produkt bez konieczności ponoszenia początkowych kosztów. Jeśli uznasz, że spełnia on Twoje potrzeby, licencje są dostępne już od $799.

Często Zadawane Pytania

Jakie są podstawowe metody inicjalizacji listy w C#?

W C# można zainicjalizować listę, tworząc instancję klasy List, gdzie T jest typem elementów. Na przykład, List fruits = new List(); to podstawowy sposób inicjalizacji listy.

Jak składnia inicjalizatora kolekcji może poprawić inicjalizację listy w C#?

Składnia inicjalizatora kolekcji pozwala na wypełnienie listy bezpośrednio podczas jej tworzenia, co sprawia, że kod jest bardziej zwięzły. Na przykład: List fruits = new List { 'Apple', 'Banana', 'Cherry' };.

Jaki jest cel składni inicjalizatora obiektu podczas inicjalizacji list?

Składnia inicjalizatora obiektu jest użyteczna do inicjalizacji list z niestandardowymi obiektami, pozwala na ustawienie wartości właściwości podczas tworzenia listy. Na przykład: new Person { Name = 'John', Age = 30 }; w liście.

Czy można ustawić początkową pojemność listy i dlaczego jest to pomocne?

Tak, ustawienie początkowej pojemności listy może poprawić wydajność, zmniejszając potrzebę realokacji pamięci w miarę wzrostu listy. Przykład: List fruits = new List(10);.

Jak można zainicjalizować listę z istniejącej tablicy w C#?

Można zainicjalizować listę z tablicy używając konstruktora listy, który akceptuje IEnumerable. Przykład: List fruits = new List(fruitArray);.

Jaką rolę odgrywa metoda AddRange w inicjalizacji listy?

Metoda AddRange dodaje wiele elementów z kolekcji do listy jednocześnie, optymalizując wydajność poprzez minimalizację realokacji. Przykład: fruits.AddRange(moreFruits);.

Jak można inicjalizować niestandardowe obiekty w liście za pomocą inicjalizatorów?

Niestandardowe obiekty można inicjalizować w liście, używając kombinacji inicjalizatorów obiektów i kolekcji, co pozwala na utworzenie listy w pojedynczym wyrażeniu. Przykład: new List { new Person { Name = 'Alice', Age = 28 } };.

Czym są metody rozszerzające i jaki mają związek z inicjalizacją list?

Metody rozszerzające pozwalają na dodanie nowych funkcjonalności do istniejących typów. Na przykład, metody rozszerzające takie jak InitializeWith mogą być napisane, aby usprawnić inicjalizację i wypełnianie list.

Jak można konwertować listy na PDF w C#?

Używając IronPDF, można przekonwertować listę na tabelę HTML i wyrenderować ją jako PDF, upraszczając proces generowania PDF-ów z kolekcji danych w C#.

Czy dostępna jest wersja próbna do generowania PDF-ów z kolekcji danych?

Tak, IronPDF oferuje wersję próbną, umożliwiającą przetestowanie możliwości generowania PDF-ów z kolekcji danych bez początkowego zakupu.

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