Saltar al pie de página
.NET AYUDA

C# iList (Cómo Funciona para Desarrolladores)

Introducción a la ILista

IList es parte del namespace Collections del .NET Framework. Es una interfaz de colección no genérica que proporciona el esquema para una colección de objetos a los que se puede acceder individualmente por su índice. A diferencia de los arrays, IList permite un número dinámico de elementos de valor de objeto, lo que significa que puedes agregar o eliminar elementos de la colección según sea necesario. Sirve como la interfaz base para todas las listas no genéricas en el .NET Framework, ofreciendo una forma de gestionar una colección de objetos de manera más flexible que los arrays. Aprenderemos sobre la interfaz IList y la IronPDF C# PDF Library en este tutorial.

Comprensión de la interfaz IList

La declaración public interface IList es una parte fundamental de la creación de colecciones personalizadas en C# que se adhieren al contrato IList especificado por el namespace Collections del .NET Framework. IList incluye propiedades y métodos que permiten acceder a los elementos de la colección, contarlos y modificar la colección agregando, insertando o eliminando elementos. Aquí están algunas de las propiedades y métodos clave definidos en la interfaz IList:

  • Propiedades como IsFixedSize y IsReadOnly informan si la colección es de tamaño fijo o de solo lectura, respectivamente.
  • Métodos como Add, Insert, Remove y RemoveAt se utilizan para modificar los elementos dentro de la colección. Puedes agregar, insertar y eliminar elementos.
  • El método IndexOf es para localizar elementos, y la propiedad Item (o indexador en C#) permite obtener y establecer elementos en función de su índice.

Uso práctico de la interfaz IList

Para mostrar cómo funciona IList, vamos a crear un ejemplo simple. Este ejemplo demostrará cómo declarar un IList, agregar elementos a él e iterar sobre su contenido.

Creación y modificación de una ILista

Primero, veamos cómo declarar un IList y agregarle elementos:

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        // Creating an IList instance
        IList myIList = new ArrayList();

        // Adding elements to the IList
        myIList.Add("Hello");
        myIList.Add(10);
        myIList.Add(new object());

        // Displaying the number of values in the IList using the Count property
        Console.WriteLine($"Number of elements: {myIList.Count}");

        // Accessing elements using a loop
        foreach (var element in myIList)
        {
            Console.WriteLine(element);
        }
    }
}
using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        // Creating an IList instance
        IList myIList = new ArrayList();

        // Adding elements to the IList
        myIList.Add("Hello");
        myIList.Add(10);
        myIList.Add(new object());

        // Displaying the number of values in the IList using the Count property
        Console.WriteLine($"Number of elements: {myIList.Count}");

        // Accessing elements using a loop
        foreach (var element in myIList)
        {
            Console.WriteLine(element);
        }
    }
}
Imports System
Imports System.Collections

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Creating an IList instance
		Dim myIList As IList = New ArrayList()

		' Adding elements to the IList
		myIList.Add("Hello")
		myIList.Add(10)
		myIList.Add(New Object())

		' Displaying the number of values in the IList using the Count property
		Console.WriteLine($"Number of elements: {myIList.Count}")

		' Accessing elements using a loop
		For Each element In myIList
			Console.WriteLine(element)
		Next element
	End Sub
End Class
$vbLabelText   $csharpLabel

En el ejemplo anterior, hemos creado una instancia de IList usando ArrayList, una clase que implementa IList. Hemos agregado una mezcla de diferentes tipos de objetos para demostrar que un IList puede contener cualquier objeto. Finalmente, hemos iterado sobre la colección, imprimiendo cada elemento.

Acceso y modificación basados en índices

Acceder y modificar elementos por su índice es una característica clave de IList. El siguiente ejemplo muestra cómo puede hacerse:

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        IList myIList = new ArrayList { "Hello", 10, new object() };

        // Accessing an element by index
        object value = myIList[1];
        Console.WriteLine($"Element at index 1: {value}");

        // Modifying an element by index
        myIList[1] = 20;
        Console.WriteLine($"Modified element at index 1: {myIList[1]}");
    }
}
using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        IList myIList = new ArrayList { "Hello", 10, new object() };

        // Accessing an element by index
        object value = myIList[1];
        Console.WriteLine($"Element at index 1: {value}");

        // Modifying an element by index
        myIList[1] = 20;
        Console.WriteLine($"Modified element at index 1: {myIList[1]}");
    }
}
Imports System
Imports System.Collections

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim myIList As IList = New ArrayList From { "Hello", 10, New Object() }

		' Accessing an element by index
		Dim value As Object = myIList(1)
		Console.WriteLine($"Element at index 1: {value}")

		' Modifying an element by index
		myIList(1) = 20
		Console.WriteLine($"Modified element at index 1: {myIList(1)}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Implementación de una ILista personalizada

A veces, puede que necesites una colección adaptada que herede de IList. Esto permite un mayor control sobre cómo se almacenan, acceden y modifican los elementos. A continuación se muestra un ejemplo de una colección personalizada simple que implementa IList:

using System;
using System.Collections;

public class CustomCollection : IList
{
    private ArrayList _innerList = new ArrayList();

    public object this[int index]
    {
        get => _innerList[index];
        set => _innerList[index] = value;
    }

    public bool IsFixedSize => _innerList.IsFixedSize;
    public bool IsReadOnly => _innerList.IsReadOnly;
    public int Count => _innerList.Count;
    public bool IsSynchronized => _innerList.IsSynchronized;
    public object SyncRoot => _innerList.SyncRoot;

    public int Add(object value)
    {
        return _innerList.Add(value);
    }

    public void Clear()
    {
        _innerList.Clear();
    }

    public bool Contains(object value)
    {
        return _innerList.Contains(value);
    }

    public int IndexOf(object value)
    {
        return _innerList.IndexOf(value);
    }

    public void Insert(int index, object value)
    {
        _innerList.Insert(index, value);
    }

    public void Remove(object value)
    {
        _innerList.Remove(value);
    }

    public void RemoveAt(int index)
    {
        _innerList.RemoveAt(index);
    }

    public void CopyTo(Array array, int index)
    {
        _innerList.CopyTo(array, index);
    }

    public IEnumerator GetEnumerator()
    {
        return _innerList.GetEnumerator();
    }
}
using System;
using System.Collections;

public class CustomCollection : IList
{
    private ArrayList _innerList = new ArrayList();

    public object this[int index]
    {
        get => _innerList[index];
        set => _innerList[index] = value;
    }

    public bool IsFixedSize => _innerList.IsFixedSize;
    public bool IsReadOnly => _innerList.IsReadOnly;
    public int Count => _innerList.Count;
    public bool IsSynchronized => _innerList.IsSynchronized;
    public object SyncRoot => _innerList.SyncRoot;

    public int Add(object value)
    {
        return _innerList.Add(value);
    }

    public void Clear()
    {
        _innerList.Clear();
    }

    public bool Contains(object value)
    {
        return _innerList.Contains(value);
    }

    public int IndexOf(object value)
    {
        return _innerList.IndexOf(value);
    }

    public void Insert(int index, object value)
    {
        _innerList.Insert(index, value);
    }

    public void Remove(object value)
    {
        _innerList.Remove(value);
    }

    public void RemoveAt(int index)
    {
        _innerList.RemoveAt(index);
    }

    public void CopyTo(Array array, int index)
    {
        _innerList.CopyTo(array, index);
    }

    public IEnumerator GetEnumerator()
    {
        return _innerList.GetEnumerator();
    }
}
Imports System
Imports System.Collections

Public Class CustomCollection
	Implements IList

	Private _innerList As New ArrayList()

	Default Public Property Item(ByVal index As Integer) As Object Implements IList.Item
		Get
			Return _innerList(index)
		End Get
		Set(ByVal value As Object)
			_innerList(index) = value
		End Set
	End Property

	Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
		Get
			Return _innerList.IsFixedSize
		End Get
	End Property
	Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly
		Get
			Return _innerList.IsReadOnly
		End Get
	End Property
	Public ReadOnly Property Count() As Integer Implements System.Collections.ICollection.Count
		Get
			Return _innerList.Count
		End Get
	End Property
	Public ReadOnly Property IsSynchronized() As Boolean Implements System.Collections.ICollection.IsSynchronized
		Get
			Return _innerList.IsSynchronized
		End Get
	End Property
	Public ReadOnly Property SyncRoot() As Object Implements System.Collections.ICollection.SyncRoot
		Get
			Return _innerList.SyncRoot
		End Get
	End Property

	Public Function Add(ByVal value As Object) As Integer Implements IList.Add
		Return _innerList.Add(value)
	End Function

	Public Sub Clear() Implements IList.Clear
		_innerList.Clear()
	End Sub

	Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains
		Return _innerList.Contains(value)
	End Function

	Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf
		Return _innerList.IndexOf(value)
	End Function

	Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert
		_innerList.Insert(index, value)
	End Sub

	Public Sub Remove(ByVal value As Object) Implements IList.Remove
		_innerList.Remove(value)
	End Sub

	Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt
		_innerList.RemoveAt(index)
	End Sub

	Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements System.Collections.ICollection.CopyTo
		_innerList.CopyTo(array, index)
	End Sub

	Public Function GetEnumerator() As IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
		Return _innerList.GetEnumerator()
	End Function
End Class
$vbLabelText   $csharpLabel

Esta clase CustomCollection encapsula un ArrayList, una clase que ella misma implementa IList. Nuestra CustomCollection reenvía las llamadas al ArrayList subyacente, permitiendo que se comporte como cualquier otra colección que implemente IList. Este ejemplo demuestra la creación de una colección que puede ser accedida por índice, modificada (elementos añadidos, insertados o eliminados) e iterada, al igual que cualquier colección .NET incorporada que implemente IList.

Operaciones avanzadas con IList

Más allá de las operaciones básicas de agregar, eliminar y acceder, IList permite manipulaciones y consultas más complejas. Por ejemplo, verificar si la colección contiene un objeto específico o encontrar el índice de un objeto dentro de la colección son operaciones que pueden ser esenciales para ciertas aplicaciones:

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        IList myIList = new ArrayList { "Hello", 10, new object() };

        // Check if the IList contains a specific object
        bool contains = myIList.Contains(10); // Assuming 10 was added previously
        Console.WriteLine($"Contains 10: {contains}");

        // Find the index of a specific object
        int index = myIList.IndexOf(10);
        Console.WriteLine($"Index of 10: {index}");
    }
}
using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        IList myIList = new ArrayList { "Hello", 10, new object() };

        // Check if the IList contains a specific object
        bool contains = myIList.Contains(10); // Assuming 10 was added previously
        Console.WriteLine($"Contains 10: {contains}");

        // Find the index of a specific object
        int index = myIList.IndexOf(10);
        Console.WriteLine($"Index of 10: {index}");
    }
}
Imports System
Imports System.Collections

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim myIList As IList = New ArrayList From { "Hello", 10, New Object() }

		' Check if the IList contains a specific object
		Dim contains As Boolean = myIList.Contains(10) ' Assuming 10 was added previously
		Console.WriteLine($"Contains 10: {contains}")

		' Find the index of a specific object
		Dim index As Integer = myIList.IndexOf(10)
		Console.WriteLine($"Index of 10: {index}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Estas operaciones pueden ser particularmente útiles al tratar con colecciones de objetos donde necesitas determinar la presencia o posición de elementos específicos sin tener que iterar sobre toda la colección.

IronPDF: Biblioteca PDF C

C# iList (Cómo Funciona para Desarrolladores): Figura 1 - IronPDF

IronPDF es una biblioteca de PDF para desarrolladores de .NET que permite la creación y manipulación de documentos PDF directamente dentro de aplicaciones .NET. Admite la conversión de HTML a documentos PDF, imágenes y páginas web a PDF. Los desarrolladores pueden agregar fácilmente funcionalidades de PDF a sus aplicaciones con esta biblioteca. IronPDF también incluye funciones para editar, fusionar y dividir archivos PDF, lo que proporciona un control integral sobre la manipulación de PDF.

IronPDF se destaca en la conversión de HTML a PDF, asegurando la preservación precisa de los diseños y estilos originales. Es perfecto para crear PDFs a partir de contenido basado en la web como informes, facturas y documentación. Con soporte para archivos HTML, URLs y cadenas HTML en bruto, IronPDF produce fácilmente documentos PDF de alta calidad.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Ejemplo de código

Aquí hay un ejemplo sencillo que demuestra la generación de un documento PDF simple a partir de una lista de cadenas usando IronPDF y la interfaz IList:

using IronPdf;
using System.Collections.Generic;

public class PDFGenerator
{
    public static void GeneratePDFFromList(IList<string> dataList)
    {
        // Initialize the HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Start building HTML content from the dataList
        var htmlContent = "<h1>My Data List</h1><ul>";
        foreach (var item in dataList)
        {
            htmlContent += $"<li>{item}</li>";
        }
        htmlContent += "</ul>";

        // Convert HTML string to PDF
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF to a file
        pdfDocument.SaveAs("DataList.pdf");
    }
}

// Example usage
class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key";
        IList<string> myDataList = new List<string> { "Apple", "Banana", "Cherry" };
        PDFGenerator.GeneratePDFFromList(myDataList);
    }
}
using IronPdf;
using System.Collections.Generic;

public class PDFGenerator
{
    public static void GeneratePDFFromList(IList<string> dataList)
    {
        // Initialize the HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Start building HTML content from the dataList
        var htmlContent = "<h1>My Data List</h1><ul>";
        foreach (var item in dataList)
        {
            htmlContent += $"<li>{item}</li>";
        }
        htmlContent += "</ul>";

        // Convert HTML string to PDF
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF to a file
        pdfDocument.SaveAs("DataList.pdf");
    }
}

// Example usage
class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key";
        IList<string> myDataList = new List<string> { "Apple", "Banana", "Cherry" };
        PDFGenerator.GeneratePDFFromList(myDataList);
    }
}
Imports IronPdf
Imports System.Collections.Generic

Public Class PDFGenerator
	Public Shared Sub GeneratePDFFromList(ByVal dataList As IList(Of String))
		' Initialize the HtmlToPdf renderer
		Dim renderer = New ChromePdfRenderer()

		' Start building HTML content from the dataList
		Dim htmlContent = "<h1>My Data List</h1><ul>"
		For Each item In dataList
			htmlContent &= $"<li>{item}</li>"
		Next item
		htmlContent &= "</ul>"

		' Convert HTML string to PDF
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)

		' Save the PDF to a file
		pdfDocument.SaveAs("DataList.pdf")
	End Sub
End Class

' Example usage
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		Dim myDataList As IList(Of String) = New List(Of String) From {"Apple", "Banana", "Cherry"}
		PDFGenerator.GeneratePDFFromList(myDataList)
	End Sub
End Class
$vbLabelText   $csharpLabel

En este ejemplo, se utiliza un IList<string> para almacenar una colección de nombres de frutas. El método GeneratePDFFromList luego itera sobre esta lista, construyendo una cadena HTML que incluye cada elemento en una lista desordenada. El ChromePdfRenderer de IronPDF convierte este contenido HTML en un documento PDF, que posteriormente se guarda en un archivo.

C# iList (Cómo Funciona para Desarrolladores): Figura 2 - Salida PDF

Conclusión

C# iList (Cómo Funciona para Desarrolladores): Figura 3 - Licencias

Esta guía para principiantes tenía como objetivo cubrir los conceptos básicos y usos prácticos de IList en C#. Con ejemplos que van desde el uso simple hasta la implementación personalizada, está claro que IList es una herramienta poderosa en el kit de herramientas de un desarrollador C#. Ya sea que estés manipulando colecciones de datos o creando tus propios tipos de colecciones, IList ofrece la funcionalidad y flexibilidad necesarias para el desarrollo de software efectivo. IronPDF ofrece una prueba gratuita de su biblioteca PDF para usuarios interesados, con licencias disponibles a partir de $799.

Preguntas Frecuentes

¿Qué es la interfaz IList en C#?

La interfaz `IList` es parte del espacio de nombres de colecciones del .NET Framework utilizado para crear colecciones dinámicas que pueden ser accedidas por índice. Proporciona métodos para agregar, insertar, eliminar y acceder a elementos, ofreciendo más flexibilidad que los arreglos estáticos.

¿Cómo puedes convertir HTML a PDF en C#?

Puedes convertir HTML a PDF en C# utilizando el método `RenderHtmlAsPdf` de IronPDF. Esto te permite transformar cadenas HTML, archivos o URLs en documentos PDF de alta calidad.

¿Cuáles son algunos métodos clave de la interfaz IList?

Los métodos clave de la interfaz `IList` incluyen `Add`, `Insert`, `Remove`, `RemoveAt` y `IndexOf`. Estos métodos son esenciales para gestionar y modificar los elementos dentro de la colección dinámicamente.

¿Cómo puedes crear un IList personalizado en C#?

Para crear un `IList` personalizado en C#, puedes implementar la interfaz `IList` en una clase, sobrescribiendo los métodos y propiedades necesarios como `Add`, `Remove` e `IndexOf`, para personalizar cómo la colección maneja sus elementos.

¿Cómo crea IronPDF PDFs a partir de HTML?

IronPDF utiliza la clase `ChromePdfRenderer` para convertir contenido HTML en PDFs. Soporta la conversión desde cadenas HTML, archivos o URLs, asegurando la creación precisa de PDFs desde contenido web.

¿Puedes generar un PDF a partir de un IList de datos?

Sí, puedes generar un PDF a partir de un IList iterando sobre la lista para construir una cadena HTML, y luego usando el `ChromePdfRenderer` de IronPDF para convertir el HTML en un documento PDF, que se puede guardar usando el método `SaveAs`.

¿Qué operaciones avanzadas soporta IList?

Las operaciones avanzadas en `IList` incluyen verificar si la colección contiene un objeto específico usando `Contains` y encontrar el índice de un objeto con `IndexOf`. Estas funciones ayudan a gestionar colecciones eficientemente sin necesidad de buscar manualmente entre elementos.

¿Cómo puedes solucionar problemas de generación de PDF en C#?

Si encuentras problemas con la generación de PDF en C#, asegúrate de que tu contenido HTML esté correctamente formateado y que estás utilizando la versión más reciente de IronPDF. Verifica cualquier excepción lanzada durante el proceso de conversión para obtener más información.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más