Cuando trabajamos con diccionarios en .NET, es muy común comprobar si existe un elemento con una clave determinada antes de obtenerlo para evitar una excepción KeyNotFoundException
:
var numbers = new Dictionary<int, string>()
{
[1] = "One",
[2] = "Two",
[3] = "Three"
};
// Aseguramos que el elemento existe antes de obtenerlo
if (numbers.ContainsKey(3))
{
Console.WriteLine(numbers[3]);
}
Sin embargo, esta comprobación tiene coste. Es decir, aunque el acceso a los diccionarios sea muy rápido -O(1)-, no quiere decir que no consuma tiempo, por lo que es interesante conocer alternativas más eficientes para estos escenarios.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo modificar la reason phrase en una respuesta HTTP de ASP.NET Core
José M. Aguilar - 101 citas célebres más del mundo de la informática (¡505 ya!)
José M. Aguilar
.NET Core / .NET
- C#: How to Enumerate over Enum values and names
Chris Pietschmann - .NET Core - View outdated packages
Bart Wullems - .NET 8 — Frozen Collections
Henrique Siebert Domareski - 7 Most Common Mistakes in C# Programming
Konstantin Fedorov - How to check if a DLL and an exe is a .NET assembly
Gérald Barré - Serialization and Deserialization with YamlDotNet
Muhammad Afzal Qureshi - C# Discriminated Union: What’s Driving the C# Community’s Inquiries?
NDepend Team - String Performance: Checking for a Character
David McCarter - Refactor your code with C# collection expressions
David Pine - Enforce architectural constrains using NetArchTest
Dennis Frühauff - .NET 9 LINQ Performance Edition
Steven Giesel - General Performance Tip: Type Conversion
David McCarter - Generate QR Codes With QRCoder in .NET
Ryan Miranda - Fast Search and Replace in Large Number of Files: A Practical Guide
Brian C Hart - Support Corner: Dotfuscator and Strong Named Assemblies
Ben Nettleton
Buah, siempre se dice que el tiempo pasa volando, pero es que es verdad. Parece que fue ayer cuando decidí comenzar a en este blog, y hoy hace 18 años de eso. ¡El blog ya es mayor de edad! 🎉
Cuando empecé a escribir por aquí, aún bajo el dominio de Blogger jmaguilar.blogspot.com y con un nombre ligeramente más largo (Variable not found, 0:1, como homenaje a mi querido ZX Spectrum), Windows XP aún llenaba de color las pantallas de nuestros vetustos PC, aunque empezábamos a oír hablar de un nuevo sistema operativo llamado Windows Vista.
Programábamos aplicaciones ASP.NET 2.0 en Visual Studio 2005, usando un C# que apenas acababa de incorporar el soporte para generics o tipos anulables, y las desplegábamos por FPT a hostings o servidores on-premise, porque las nubes eran simplemente algo con formas caprichosas que veíamos en el cielo.
Los teléfonos móviles no eran nada inteligentes, eso de los smartphones llegó más tarde. En aquellos tiempos estos dispositivos sólo servían para hacer llamadas y enviar SMS. A lo sumo, podíamos jugar al Snake, pero poco más. Nada que ver con los dispositivos que llevamos en el bolsillo en este momento, ni las herramientas que éstos han propiciado.
El código fuente de los proyectos lo guardábamos donde podíamos, muchas veces incluso sin usar sistema de gestión de código o control de versiones, o utilizando herramientas poco amigables (¿alguien tiene todavía pesadillas con Source Safe? 😉)
Internet era muy distinto. Aunque las ADSL ya habían llegado a muchos hogares, la velocidad de conexión era mucho menor que la que disfrutamos ahora. Servicios, que ahora son indispensables para nuestro trabajo, como Stack Overflow o GitHub aún no existían, como tampoco (o estaban muy en pañales) las redes y aplicaciones sociales que hoy en día nos mantienen informados y en contacto, como Twitter (creo que nunca me acostumbraré a llamarlo "X" 🤦♂️), Instagram, Facebook, WhatsApp, Youtube, Twitch o TikTok.
Y por supuesto, esto de la inteligencia artificial tal y como la estamos conociendo en este momento era absolutamente impensable. Los que no trabajábamos en ese campo, apenas empezábamos a oír hablar de cosas como el machine learning o redes neuronales, y no tenían aplicación en aplicaciones, digamos, "normales".
Las cosas han cambiado mucho desde entonces, pero una sigue igual: mi pasión por la tecnología y por compartir lo que voy aprendiendo siguen intactos. Por eso, aunque a veces cueste encontrar tiempo para escribir, sigo aquí, en este rincón de la red, compartiendo con vosotros lo que voy aprendiendo, lo que me parece interesante o lo que creo que puede ser útil para alguien.
Pero todos es gracias a vosotros, esa pequeña pero fiel pandilla de amigos que me lee, me comenta y me anima a seguir adelante. ¡Muchas gracias a todos!
Y como todos los años por estas fechas, vamos a hacer balance de cómo han ido las cosas en el blog, que ya os adelanto que regular 😔
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Validación de servicios en entornos distintos a "Development" en ASP.NET Core 6
José M. Aguilar - La nueva directiva @inject de ASP.NET Core MVC
José M. Aguilar
.NET Core / .NET
- Adventures serializing absolutely everything in C#
Isadora Sophia Rodopoulos - Switch expression for void methods
Bart Wullems - Introducing OpenSilver 2.2 with LightSwitch Support
OpenSilver - Creating a .NET AsciiMath parser and using it in a Markdig extension
Andrew Lock - Secure your container build and publish with .NET 8
Richard Lander - Working with Rust Libraries from C# .NET Applications
Khalid Abuhakmeh - Some more C# 12
Tom Deseyn - How does a List know that you changed it while enumerating it?
Steven Giesel - Checking your solution for NuGet vulnerabilities or deprecated packages
Steven Giesel - Generate Images in C# Using ImageMagick & Generate Images in C# Using ImageSharp
Emmanuel Adom - General Performance Tip: Choosing Between Conditional Statements – If, Switch, and Switch Expression Performance in C#
David McCarter