
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Personalizar restricciones de ruta en línea en ASP.NET Core
José M. Aguilar - Inyección de dependencias en filtros ASP.NET Core MVC
José M. Aguilar
.NET Core / .NET
- ¿.NET 7 no soportado, pero .NET 6 sí? - Cómo funcionan las versiones en .NET
José Manuel Alarcón - .NET Workloads 101
Miguel Angel Martín Hernández - Introducing links to source code for .NET API Docs
Min Huang - How to test a Roslyn analyzer
Gérald Barré - How to Compare Two Dictionaries in C#
Januarius Njoku - Blocking primary constructor member capture using a Roslyn Analyzer
Andrew Lock - Fastest Ways to Perform Base 10 Conversions in C#
Martin Chege - What's New in C# 13: Enhanced Params, Performance Boosts, and New Extension Types
Almir Vuk - .NET Core Configuration in .NET 8
Dhananjeyan Balaretnaraja - Introduction to the StronglyTypedId Package in .NET
Caleb Okechukwu - Running a Hosted Service in a Console Application
Bryan Hogan - Cancel WhenAny - linked CancellationTokenSource
Steven Giesel - Metadata Consulting [dot] ca: C# dotNet The fastest way to check if a file is a PDF file or not
Metadata Consulting - Lookup in C#
Januarius Njoku - ASP.NET Core Basics: Getting Started with GraphQL
Assis Zang - Using thread-safe classes doesn’t make your code thread-safe
Henrique Dalcin Dalmas - How to Set the Exit Code for a Console Application in .NET
Stefan Cruz
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: enlaces

Me da la impresión de que el operador with
de C# no es demasiado conocido, y creo que vale la pena echarle un vistazo porque puede resultarnos útil en nuestro día a día.
Introducido con C# 9, allá por 2020, las expresiones with
proporcionan una forma sencilla de crear nuevas instancias de objetos "copiando" las propiedades de otro objeto, pero con la posibilidad de modificar algunas de ellas sobre la marcha. Esto, aunque puede usarse con varios tipos de objeto, es especialmente interesante cuando estamos trabajando con componentes inmutables, como son los records
, porque la única posibilidad que tenemos de alterarlos es creando copias con las modificaciones que necesitemos.

Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Los diez mandamientos del egoless programming
José M. Aguilar - Cadenas de texto con ayudas sintácticas en .NET 7 (y anteriores)
José M. Aguilar
.NET Core / .NET
- .NET Announcements & Updates from Microsoft Build 2024
.NET Team - Announcing NuGet 6.10
The NuGet Team - How to use HttpClient correctly to avoid socket exceptions
David Grace - .NET 7 Support Just Ended, Here's How to Upgrade to .NET 8
David Ramel - MemoryCache, DistributedCache and HybridCache
Steven Giesel - Roslyn analyzers: How to
Gérald Barré - How to Deal With NullReferenceException? Object reference not set to an instance of an object.
Metalama team - Thoughts about primary constructors: 3 pros and 5 cons
Andrew Lock

Revisando código ajeno, me he encontrado con un ejemplo de uso del operador null coalescing assignment de C# que me ha parecido muy elegante y quería compartirlo con vosotros.
Como recordaréis, este operador, introducido en C# 8, es una fórmula muy concisa para asignar un valor a una variable si ésta previamente es null, una mezcla entre el operador de asignación y el null coalescing operator que disfrutamos desde C# 2:
// C# "clásico":
var x = GetSomething();
...
if(x == null) {
x = GetSomethingElse();
}
// Usando null coalescing operator (C# 2)
var x = GetSomething();
...
x = x ?? GetSomethingElse();
// Usando null coalescing assignment (C# 8)
var x = GetSomething();
...
x ??= GetSomethingElse();
Pero, además, al igual que otras asignaciones, este operador retorna el valor asignado, lo que nos permite encadenar asignaciones y realizar operaciones adicionales en la misma línea.
Por ejemplo, observad el siguiente código:
Console.WriteLine(y ??= "Hello, World!");
Aquí, básicamente lo que hacemos es asignar el valor "Hello, World!" a la variable si ésta contiene un nulo, y luego imprimirlo por consola. Y si no es nulo, simplemente se imprime su valor actual.

Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo contar y enumerar los items almacenados en un objeto MemoryCache en .NET 6
José M. Aguilar - Interpolación de cadenas en C# 6, a fondo
José M. Aguilar
.NET Core / .NET
- .NET: Eligiendo el framework de Interfaz de Usuario más adecuado para crear aplicaciones de escritorio
José Manuel Alarcón - Read and Write Azure Blob Storage with C#
Chris Pietschmann - What’s new in Orleans 8 for Scalable Distributed Applications
Mike Kistler - C# .NET 8 — MediatR Pipelines
Gabriele Tronchin - How to Find the Latitude and Longitude of a Location in C#
Ellie Zubrowski - An introduction to primary constructors in C#12
Andrew Lock - Mastering Exception Handling in C#: A Comprehensive Guide
Anton Martyniuk - Modeling: Date vs. DateTime
Oren Eini - How to avoid conflicts when testing your dotnet templates locally
Gérald Barré - Scheduled Message Delivery with Wolverine
Jeremy D. Miller - The .NET Generic Math Library
NDepend Team - How to Generate a Random Color Name in C#
Ellie Zubrowski - Collection Performance: Exercise Caution When Using Take() with a Basic Count
David McCarter

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.