AYUDA .NET

Diccionario C# Trygetvalue (Cómo funciona para desarrolladores)

Chipego
Chipego Kalinda
29 de agosto, 2023
Compartir:

C# es un lenguaje versátil y potente que ofrece numerosas funcionalidades. Entre ellos se encuentra el Diccionario C#.

Comprender los conceptos básicos del diccionario de C

Antes de profundizar en el método TryGetValue, es crucial entender qué es un Diccionario en C#. En términos sencillos, un diccionario es una colección de pares clave/valor. Por ejemplo, es posible que tenga un Diccionario donde las claves sean los nombres de los estudiantes (valores de tipo cadena), y los valores sean sus edades correspondientes (valores enteros).


    Dictionary<string, int> studentAges = new Dictionary<string, int>
    {
        {"Alice", 20},
        {"Bob", 22},
        {"Charlie", 19}
    };

    Dictionary<string, int> studentAges = new Dictionary<string, int>
    {
        {"Alice", 20},
        {"Bob", 22},
        {"Charlie", 19}
    };
Dim studentAges As New Dictionary(Of String, Integer) From {
	{"Alice", 20},
	{"Bob", 22},
	{"Charlie", 19}
}
$vbLabelText   $csharpLabel

Las claves de un diccionario son únicas. Puede acceder a las claves para obtener el valor correspondiente, lo que hace que los diccionarios sean increíblemente eficaces para las funciones de búsqueda.

El enfoque convencional: método ContainsKey

Cuando se trabaja con diccionarios de C#, una tarea habitual es obtener un valor asociado a una clave concreta. Sin embargo, acceder directamente a una clave que no existe puede lanzar una KeyNotFoundException, interrumpiendo el flujo de tu programa. Para evitarlo, es habitual comprobar si la clave especificada existe en el diccionario. Aquí es donde entra en juego el método ContainsKey.

El método ContainsKey es una función directa e intuitiva que verifica si una cierta clave está presente en el Diccionario. A continuación se muestra la sintaxis básica del método ContainsKey:

Dictionary<TKey, TValue>.ContainsKey(TKey key)
Dictionary<TKey, TValue>.ContainsKey(TKey key)
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Dictionary<TKey, TValue>.ContainsKey(TKey key)
$vbLabelText   $csharpLabel

Toma la clave como parámetro y devuelve un valor booleano. Si la clave está en el Dictionary, devolverá true; de lo contrario, devolverá false.

Considere el siguiente ejemplo en el que tenemos un Diccionario con los nombres de los alumnos como claves y sus correspondientes edades como valores.

Dictionary<string, int> studentAges = new Dictionary<string, int>
{
    {"Alice", 20},
    {"Bob", 22},
    {"Charlie", 19}
};
Dictionary<string, int> studentAges = new Dictionary<string, int>
{
    {"Alice", 20},
    {"Bob", 22},
    {"Charlie", 19}
};
Dim studentAges As New Dictionary(Of String, Integer) From {
	{"Alice", 20},
	{"Bob", 22},
	{"Charlie", 19}
}
$vbLabelText   $csharpLabel

Ahora, si deseas obtener la edad de un estudiante llamado "Alice", primero usarías el método ContainsKey para verificar si "Alice" es una clave en el Diccionario.

string student = "Alice";
if(studentAges.ContainsKey(student))
{
    int age = studentAges [student];
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
string student = "Alice";
if(studentAges.ContainsKey(student))
{
    int age = studentAges [student];
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
Dim student As String = "Alice"
If studentAges.ContainsKey(student) Then
	Dim age As Integer = studentAges (student)
	Console.WriteLine($"{student} is {age} years old.")
Else
	Console.WriteLine($"{student} does not exist in the dictionary.")
End If
$vbLabelText   $csharpLabel

En este caso, el programa imprimirá "Alice tiene 20 años." Si intentaras obtener la edad de un estudiante que no está presente en el diccionario, el método ContainsKey evitaría que se lance una KeyNotFoundException y en su lugar imprimirá un mensaje indicando que el estudiante no existe.

Sin embargo, aunque el método ContainsKey puede ser útil, no siempre es el más eficiente. En el fragmento de código anterior, se realizan dos operaciones de búsqueda en el Diccionario: una para el método ContainsKey y otra para recuperar el valor. Esto puede llevar mucho tiempo, especialmente cuando se trata de diccionarios grandes.

Aunque el método ContainsKey es una forma sencilla e intuitiva de manejar excepciones cuando no se encuentra una clave especificada en un Diccionario, vale la pena considerar métodos alternativos como TryGetValue, que pueden lograr una funcionalidad similar con mejor rendimiento. Discutiremos TryGetValue en más detalle en las siguientes secciones.

Combinar Verificación y Recuperación con TryGetValue

Aquí es donde resulta útil el método TryGetValue. El método TryGetValue combina la verificación y la recuperación de valores en un solo paso, ofreciendo una funcionalidad de código casi idéntica pero con un rendimiento mejorado.

El método TryGetValue requiere dos parámetros:

  1. La llave que buscas.

  2. Un parámetro out que contendrá el valor si la clave existe.

    Esta es la sintaxis:

Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
$vbLabelText   $csharpLabel

La palabra clave out se utiliza para indicar que este método cambiará el parámetro value. El valor out será el valor predeterminado del tipo de valor si no se encuentra la clave especificada (0 para enteros, null para tipos de referencia). En caso contrario, contendrá el valor correspondiente a la clave proporcionada.

Aquí se muestra cómo usar TryGetValue:

string student = "Alice";
if(studentAges.TryGetValue(student, out int age))
{
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
string student = "Alice";
if(studentAges.TryGetValue(student, out int age))
{
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
Dim student As String = "Alice"
Dim age As Integer
If studentAges.TryGetValue(student, age) Then
	Console.WriteLine($"{student} is {age} years old.")
Else
	Console.WriteLine($"{student} does not exist in the dictionary.")
End If
$vbLabelText   $csharpLabel

Este código ofrece una funcionalidad casi idéntica al ejemplo del método ContainsKey, pero es más eficiente porque solo busca la clave una vez.

TryGetValue en Ejemplo de Código en Acción

Para comprender mejor el método TryGetValue, exploremos un ejemplo práctico de código. Piense en una base de datos escolar en la que cada alumno tiene un identificador único y su nombre correspondiente. Estos datos se almacenan en un diccionario con el ID del alumno como clave y el nombre como valor.

Dictionary<int, string> studentNames = new Dictionary<int, string>
{
    {1, "Alice"},
    {2, "Bob"},
    {3, "Charlie"}
};
Dictionary<int, string> studentNames = new Dictionary<int, string>
{
    {1, "Alice"},
    {2, "Bob"},
    {3, "Charlie"}
};
Dim studentNames As New Dictionary(Of Integer, String) From {
	{1, "Alice"},
	{2, "Bob"},
	{3, "Charlie"}
}
$vbLabelText   $csharpLabel

En este caso, digamos que quiere recuperar el nombre del alumno con ID 2, pero también quiere asegurarse de que el alumno con este ID existe en la base de datos.

Tradicionalmente, primero podrías usar el método ContainsKey para verificar si la clave (ID de estudiante 2) existe y luego acceder al Diccionario para obtener el valor correspondiente (nombre del estudiante). Sin embargo, con el método TryGetValue, puedes lograr esto en un solo paso.

El método TryGetValue toma dos argumentos: la clave que estás buscando y un parámetro out que mantendrá el valor asociado con esa clave si existe. Si se encuentra la clave, el método devolverá true y asignará el valor correspondiente al parámetro out. Si no, devolverá false, y el parámetro out tomará el valor predeterminado para su tipo.

int i = 2; // Student ID
if (studentNames.TryGetValue(i, out string value))
{
    Console.WriteLine($"The name of the student with ID {i} is {value}.");
}
else
{
    Console.WriteLine($"No student with ID {i} exists in the dictionary.");
}
int i = 2; // Student ID
if (studentNames.TryGetValue(i, out string value))
{
    Console.WriteLine($"The name of the student with ID {i} is {value}.");
}
else
{
    Console.WriteLine($"No student with ID {i} exists in the dictionary.");
}
Dim i As Integer = 2 ' Student ID
Dim value As String
If studentNames.TryGetValue(i, value) Then
	Console.WriteLine($"The name of the student with ID {i} is {value}.")
Else
	Console.WriteLine($"No student with ID {i} exists in the dictionary.")
End If
$vbLabelText   $csharpLabel

En este caso, el método TryGetValue busca la clave 2 en el Diccionario studentNames. Si encuentra la clave, asigna el valor correspondiente a la variable value (el nombre del estudiante), y el método devuelve true. A continuación, el programa imprime: "El nombre del alumno con ID 2 es Bob".

Si el método TryGetValue no encuentra la clave 2, asignará el valor predeterminado para una cadena (que es nulo) a la variable value, y el método devolverá false. El código luego pasa al bloque else, imprimiendo, "No existe un estudiante con ID 2 en el diccionario."

TryGetValue simplifica tu código combinando la verificación de la existencia de la clave y la recuperación del valor en un solo paso. Además, ofrece un impulso de rendimiento, especialmente con Diccionarios más grandes, eliminando la necesidad de múltiples operaciones de búsqueda de claves.

Presentación de Iron Suite

A medida que avance en su viaje por C#, encontrará muchas herramientas y bibliotecas a su disposición que pueden mejorar significativamente sus capacidades de programación. Entre ellas se encuentran las bibliotecas Iron, un conjunto de herramientas diseñadas específicamente para ampliar la funcionalidad de las aplicaciones C#. Entre ellos se encuentran IronPDF, IronXL, IronOCR e IronBarcode. Cada una de estas bibliotecas tiene un conjunto único de funcionalidades, y todas ofrecen ventajas significativas cuando se utilizan junto con C# estándar.

IronPDF

Diccionario de C# `TryGetValue` (Cómo funciona para desarrolladores) Figura 1

Descubre IronPDF para la creación de PDF en .NET es una biblioteca de C# diseñada para crear archivos PDF a partir de HTML, editar y extraer contenido de PDF en aplicaciones .NET. Con IronPDF, puede generar mediante programación informes PDF, rellenar formularios PDF y manipular documentos PDF. La biblioteca también ofrece funciones de conversión de HTML a PDF, lo que facilita la conversión de contenidos HTML existentes en PDF.

El aspecto más destacado de IronPDF es su función de HTML a PDF, que mantiene todos los diseños y estilos intactos. Permite crear PDF a partir de contenidos web, adecuados para informes, facturas y documentación. Los archivos HTML, las URL y las cadenas HTML se pueden convertir a PDF sin problemas.

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

En el contexto de nuestro tema, imagine un escenario en el que está recuperando datos de estudiantes de un Diccionario y desea generar un informe en PDF. TryGetValue podría obtener los datos necesarios de manera eficiente y luego aprovechar IronPDF para crear el documento PDF.

IronXL

Diccionario C# `TryGetValue` (Cómo Funciona para Desarrolladores) Figura 2

Explore IronXL para Interacciones con Excel es una biblioteca de Excel para C# y .NET. Permite a los desarrolladores leer, escribir y crear archivos Excel en aplicaciones .NET sin Interop. Es perfecto para situaciones en las que se necesita exportar o importar datos de una hoja de cálculo Excel.

Acerca de TryGetValue, suponga que tiene un Diccionario donde las claves representan IDs de productos y los valores representan sus cantidades. Podría usar TryGetValue para recuperar la cantidad de un producto específico y luego usar IronXL para actualizar esa cantidad en una hoja de cálculo de gestión de inventario de Excel.

IronOCR

C# Dictionary `TryGetValue` (Cómo funciona para desarrolladores) Figura 3

Desata el poder de IronOCR para el reconocimiento de texto es una biblioteca avanzada de OCR (Reconocimiento Óptico de Caracteres) y lectura de códigos de barras para .NET y C#. Permite a los desarrolladores leer texto y códigos de barras de imágenes y PDF en aplicaciones .NET. Esto puede ser especialmente útil cuando necesitas extraer datos de documentos o imágenes escaneados y trabajar con ellos en tu código.

Considere un escenario en el que ha utilizado IronOCR para extraer identificaciones de estudiantes de documentos escaneados. Tras el procesamiento, se almacenan los ID y los datos correspondientes del alumno en un Diccionario. Al recuperar los detalles de un estudiante en particular, TryGetValue podría usarse para obtener los datos del Diccionario de manera eficiente.

IronBarcode

Diccionario C# `TryGetValue` (Cómo funciona para desarrolladores) Figura 4

Aprenda sobre IronBarcode para soluciones de código de barras es una biblioteca de lectura y escritura de códigos de barras para .NET. Con IronBarcode, los desarrolladores pueden generar y leer varios formatos de códigos de barras y códigos QR. Es una potente herramienta para codificar y descodificar datos en un formato compacto y legible por máquina.

En un escenario práctico, imagine que utiliza códigos de barras para almacenar información sobre productos en un sistema de venta al por menor. Cada código de barras podría corresponder a un identificador único de producto almacenado como clave en un Diccionario. Cuando se escanea un código de barras, podrías usar TryGetValue para obtener y mostrar rápidamente los detalles del producto asociados desde el Diccionario.

Conclusión

Al explorar las funcionalidades de las bibliotecas de Iron junto con características estándar de C# como el método TryGetValue, queda claro que estas herramientas pueden mejorar significativamente su proceso de desarrollo. Ya sea que estés trabajando con PDFs, archivos de Excel, OCR o códigos de barras, la Iron Suite tiene una solución adaptada a tus necesidades.

Lo que es aún más atractivo es que cada uno de estos productos ofrece una prueba gratuita de los productos de Iron Software, lo que le permite explorar y experimentar con las funciones sin costo alguno. Si decide continuar usando las bibliotecas, la licencia comienza desde $749 para cada producto. Sin embargo, si está interesado en varias bibliotecas de Iron, el valor es aún mayor, ya que puede adquirir la Iron Suite completa al precio de sólo dos productos individuales.

Chipego
Ingeniero de software
Chipego tiene una habilidad natural para escuchar que le ayuda a comprender los problemas de los clientes y a ofrecer soluciones inteligentes. Se unió al equipo de Iron Software en 2023, después de estudiar una licenciatura en Tecnología de la Información. IronPDF e IronOCR son los dos productos en los que Chipego se ha centrado, pero su conocimiento de todos los productos crece día a día, a medida que encuentra nuevas formas de ayudar a los clientes. Disfruta de lo colaborativa que es la vida en Iron Software, con miembros del equipo de toda la empresa que aportan su variada experiencia para contribuir a soluciones eficaces e innovadoras. Cuando Chipego está lejos de su escritorio, a menudo se le puede encontrar disfrutando de un buen libro o jugando al fútbol.
< ANTERIOR
Parámetros por defecto en C# (Cómo funciona para los desarrolladores)
SIGUIENTE >
C# Round (Cómo funciona para los desarrolladores)