
La cuestión es: ¿por qué no compila el siguiente código?
class Program {
public static void Main() {
int f = 0; int x = 0; int y = 0;
System.Console.WriteLine(
"{0} {1}",
f < x, // is f smaller than x?
y > (-1) // is y greater than -1?
);
}
}
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: c#, c#bizarro, curiosidades
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Crear manualmente instancias de clases usando el proveedor de servicios de .NET
José María Aguilar - Invalidar el contenido cacheado por el tag helper "cache" de ASP.NET Core MVC
José María Aguilar
.NET Core / .NET
- What’s new in F#
Kathleen Dollard - Prefer using Stream to byte[]
Bohdan Stupak - Supporting integration tests with WebApplicationFactory in .NET 6: Exploring .NET Core 6
Andrew Lock - Bite-Size .NET 6 - LINQ OrDefault() Overloads
Matthew Jones - IAsyncEnumerable with yield in C#
Marinko Spasojevic - C# Tip: use the Ping class instead of an HttpClient to ping an endpoint
Davide Bellone - Exploring C# 10: Global Using Declarations
Dave Brock - C# 10.0: Extended Property Patterns – Use the Dot Token to Access Nested Members
Thomas Claudius Huber - How to Create a PNG File with Transparent Background from a Powerpoint Slide in C#
Roland Weigelt - C# Records - The good, bad & ugly
Gary Woodfine

Hace unos días hablábamos de las directivas using
globales, un interesante añadido a C# 10 que permite importar espacios de nombres en todos los archivos de código del proyecto, sin necesidad de repetir cientos de veces las mismas líneas en sus encabezados. Simplemente, si un namespace es interesante para nuestro proyecto, lo declaramos como global en algún punto y será lo mismo que si lo hubiéramos hecho en cada uno de los archivos .cs:
global using System;
global using System.Text;
global using System.Text.Json;
global using MyProject.Model;
...
Bien podían haberlo dejado aquí porque ya es una mejora sustancial respecto a lo que tenemos, pero no, el equipo de diseño de C# sigue introduciendo detalles que pueden hacernos la vida más sencilla. Es el caso de los implicit usings que, de la misma forma, acompañan a .NET 6 y C# 10.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- 3 formas de saber si un componente se está ejecutando en Blazor Server o WebAssembly
José María Aguilar - Registro y obtención de múltiples implementaciones de servicios en ASP.NET Core, y un caso práctico
José María Aguilar
.NET Core / .NET
- Announcing .NET 6 Release Candidate 2
Richard Lander - CQRS Validation Pipeline with MediatR and FluentValidation
Marinko Spasojevic - Downloading a SSL/TLS certificate in .NET
Gérald Barré - World's Smallest C# Program (featuring
N
)
Niels Rasmussen - Updating NuGet packages from command-line
Thomas Ardal - The Problem with C# 10 Implicit Usings
Muhammad Rehan Saeed - Hot Reload in .NET 6- An Overview
Mohamed Yasir Kader Sha - Bite-Size .NET 6 - Chunk() in LINQ
Matthew Jones - Dotnet could not execute because the application was not found or a compatible .NET SDK is not installed
Scott Hanselman - Enable .NET CLI Tab Completion
Cody Merritt Anhorn
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- La interfaz IMiddleware: Middlewares tipados per request en ASP.NET Core
José María Aguilar - Un vistazo a los patrones relacionales y combinadores, lo nuevo de C# 9 para exprimir el pattern matching
José María Aguilar
.NET Core / .NET
- Code Coverage in .NET
Marinko Spasojevic - WebView2 Flashing when changing TabControl Tabs
Rick Strahl - Bite-Size .NET 6 - DateOnly and TimeOnly
Matthew Jones - Everything That Every .NET Developer Needs To Know About Disposable Types
David Mccarter - Exploring C# 10: Save Space with File-Scoped Namespaces
Dave Brock - Unit Testing Legacy Applications with JustMock
Peter Vogel - 6 Tips for Writing Elegant C# Code
Assis Zang
Seguro que estáis acostumbrados a ver y escribir las, a veces extensas, listas de directivas
using
encabezando vuestros archivos de código fuente C#. Aunque ciertamente los entornos de desarrollo actuales son de bastante ayuda a la hora de introducirlos e incluso a veces nos permiten colapsarlos, son unos grandes consumidores del valioso espacio vertical de nuestros monitores:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// ... (muchos using más)
namespace MyApplication
{
public class MyClass
{
...
}
}
Pero si habéis trabajado con Razor, ya sea para crear vistas MVC/Razor Pages o bien desde Blazor, seguro que os habrán encantado los archivos tipo _ViewImports.cshtml
o _Imports.razor
, pues permiten introducir directivas que se apliquen a todos los archivos Razor del proyecto.
¿No sería buena idea llevar esto mismo a nivel del lenguaje?
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo saber si un objeto no es nulo (edición C# 9)
José María Aguilar - El hosting in-process de ASP.NET Core 2.2
José María Aguilar
.NET Core / .NET
- Is C# Getting Too Complex?
Michael Moreno - J4JLogger: A Serilog Wrapper that Provides Source Code Information
Mark Olbert - Grouping Assertions in Tests
Steve Smith - Events in C#
Marinko Spasojevic - Compress Strings With .NET and C#
Khalid Abuhakmeh - Remove all event handlers from an event in C#
Rod Stephens - C# 10.0: Global Using Directives – Make Important Namespaces Available in Your Whole Project
Thomas Claudius Huber - Differences between Hashtable vs Dictonary vs ConcurrentDictionary vs ImmutableDictionary
Scott Hanselman

Como en otras ocasiones, seguro que debía ser de los pocos que quedaban en este planeta sin saber esto, pero me lo he encontrado mientras pululaba por internet y me ha parecido de lo más curioso. Y como con toda probabilidad habrá por ahí algún despistado más, me ha parecido interesante comentar por aquí mi último gran descubrimiento ;)
La cuestión es que en nuestro mundillo solemos utilizar frecuentemente los términos uppercase y lowercase para referirnos a mayúsculas y minúsculas. Pensaba, erróneamente, que los prefijos upper y lower tenían que ver con el tamaño de los caracteres, y jamás me había dado por preguntarme el por qué de este sufijo "case" tan caprichoso que estas palabras comparten.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Crear bloques de código Razor reutilizables en Blazor con Render Fragments
José María Aguilar - Crear y utilizar librerías multiplataforma con C++ y .NET Core (Parte 2)
Jorge Turrado
.NET Core / .NET
- Adiciones a LINQ en .NET 6.0
Octavio Hernandez - 6 Essential Tools to Detect and Fix Performance Issues in .NET
Michael Shpilt - Generate PDF files using an html template and Playwright
Gérald Barré - How to sign XML using RSA in .NET & ECDSA and Custom XML Signatures in .NET
Scott Brady - Source Generator For INotifyPropertyChanged
Anu Viswan - A look at the upcoming improvements to LINQ in .NET 6
Matt Eland - C# tip: define Using Aliases to avoid ambiguity
Davide Bellone - C# XML Comments in Visual Studio Code
Dennes Torres - C# 10.0 implicit global using directives
Ian Griffiths - C# 10.0: File Scoped Namespaces – Get More Space For Your Code
Thomas Claudius Huber - .NET 6 / C# 10 Top New Features Recap
Wade Gausden - Implicit Usings in .NET 6
Scott Hanselman
Si trabajáis con ASP.NET Core MVC, seguro que con frecuencia implementaréis acciones que reciben como argumento objetos complejos, que normalmente vendrán serializados en el cuerpo de la petición como JSON.
Y probablemente, lo habréis hecho esperando que el binder obre su magia y sea capaz de transformar esas secuencias de caracteres procedentes de la red en flamantes instancias de objetos del CLR, listas para ser consumidas desde las aplicaciones. Un ejemplo de acción de este tipo es la siguiente (aunque no funcionaría, luego vemos por qué):
public class FriendsController: Controller
{
[HttpPost]
public string Hello(Friend friend)
{
return $"Hola {friend.Name}, tienes {friend.Age} años";
}
}
public class Friend
{
public int Age { get; set; }
public string Name { get; set; }
}
Sin embargo, a veces nos encontramos con que, a pesar de que la petición contiene en su body los datos JSON esperados, el objeto que recibimos es nulo o tiene todas sus propiedades sin inicializar.
¿Por qué ocurre esto? En este post vamos a ver distintos motivos que podrían llevar a este comportamiento, y cómo solucionar cada caso.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo mostrar por consola las líneas que se van añadiendo a logs o archivos de texto, en tiempo real
José María Aguilar - ¿Se pueden introducir directivas o lógica de inicialización en todas las vistas y páginas sin duplicar código?
José María Aguilar
.NET Core / .NET
- Announcing .NET 6 Release Candidate 1
Richard Lander - Introduction to System.Text.Json Through Examples
Marinko Spasojevic - Investigating an infinite loop in Release configuration
Gérald Barré - Getting Started Tweetinvi .NET Twitter
Bradley Wells - Looking inside ConfigurationManager in .NET 6: Exploring .NET Core 6
Andrew Lock - CoreWCF 0.3.0 Release
Matt Connew - Deep C#: Strong Typing
Mike James - Using .NET To Validate JSON with JSON Schema
Khalid Abuhakmeh - What I Like About C# 9
Joseph Guadagno - Introducing Package Source Mapping
Nikolche Kolev - Debugging a .NET App on Linux from Windows Visual Studio with WSL
Patrick Smacchia - HTTP/3 support in .NET 6
Sam Spencer
El timeout que dejé programado semanas atrás ya ha finalizado, por lo que hay que ponerse de nuevo las pilas. Y sin duda, ningún día mejor para hacerlo que el Día Internacional del Programador, celebrado de forma más o menos consensuada el día 13 de septiembre (12 si el año es bisiesto), al ser el día 256º de cada año :)
Así que, para iniciar la temporada con buen pie, ahí va una colección de enlaces, que espero os resulten interesantes :-)
Por si te lo perdiste...
- Syncfusion Blazor UI components library: un primer vistazo
José María Aguilar - Otras formas de obtener dependencias en controladores ASP.NET Core MVC
José María Aguilar
.NET Core / .NET
- Launching Visual Studio Code cleanly from a .NET Application
Rick Strahl - File IO improvements in .NET 6
Adam Sitnik - How not to read a string from an UTF-8 stream
Gérald Barré - IntelliSense for Hosted C# Script
Phil Haack - C# static constructor called multiple times & Going deeper into static constructors hole
Jiří Činčura - Favorite improvements in .NET 6
Mark Downie - A neat Trick to Debug Exceptions in C#
Simon Sutoris - Manually Parsing a Json String Using System.Text.Json
Paul Michaels - C# Namespace Declarations
Steve Fenton - DateOnly And TimeOnly Types In .NET 6
Wade Gausden - How To Desktop in 2022
Sam Basu
Como es habitual por estas fechas, me complace (seriamente) informaros de que a partir de la semana el blog quedará en "modo verano" y dejaré de publicar nuevos contenidos hasta ya entrado septiembre.
Durante este periodo procuraré desconectar totalmente durante un par de semanas, y el resto del tiempo al menos poder bajar un poco el ritmo, a ver si puedo disfrutar un poco de esas cosas que dicen que existen fuera de las pantallas ;)
¡Nos vemos a la vuelta!

Publicado en Variable not found.
Semanas atrás echamos un vistazo por encima a Blazor UI Components, los componentes profesionales para Blazor de Syncfusion, y algún tiempo después revisamos más en detalle uno de los grandes protagonistas en el mundo de los componentes, los de creación de gráficas estadísticas o Charts.
Sin embargo, si hay un tipo de componentes que todos usamos de forma frecuente en nuestras aplicaciones profesionales son, sin duda alguna, los grids o rejillas de datos. Por esa razón, los componentes que de alguna forma simplifican su creación son probablemente los más populares en todas las suites profesionales o gratuitas, sea cual sea la tecnología en la que trabajemos.
En este post centraremos el foco en Blazor DataGrid, la propuesta de Syncfusion para crear interfaces de rejillas de datos de forma sencilla y eficaz para Blazor Server y WebAssembly.
Pero antes de empezar, recordad que, aunque se trata de un producto comercial, dispone de una licencia community bastante permisiva, que permite que en muchos casos podamos utilizar los componentes de forma totalmente gratuita.
Nota: lo que estás leyendo es un post patrocinado por Syncfusion, pero en ningún momento han revisado previamente o condicionado de alguna forma su contenido.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: blazor, blazorserver, blazorwasm, sponsored, syncfusion
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- ¿Cuánto pesa realmente una aplicación Blazor WebAssembly recién creada?
José María Aguilar - Mi controlador tiene muchos parámetros en el constructor, ¿estoy haciendo algo mal?
José María Aguilar
.NET Core / .NET
- .NET 6 LINQ New Features
Satish Yadav - ICYMI C# 9 New Features: Adding foreach Support To Any Type
Jason Roberts - How Does the StringBuilder Work in .NET? Part 1 & Part 2
Steve Gordon - Supporting Hot Reload in your .NET application
Gérald Barré - C# 10 - Top 5 New Features in the Upcoming C# Version
Nikola M. Zivkovic - Taking Your Brain To Another Dimension - A C# library for physical units
Keith Barrett - C# tip: String.IsNullOrEmpty or String.IsNullOrWhiteSpace?
Davide Bellone - Rediscovering implicit casting
Ken Bonny - Zero to Hero: Containerizing .NET 5.0 WebApis
David Kröll - Thoughts on Async/Await Conversion in a Desktop App
Rick Strahl - How to Use Custom Comparers in NUnit
Sean Killeen

Como sabéis, a no ser que se especifique lo contrario mediante la directiva @inherits
, los componentes Blazor heredan de Microsoft.AspNetCore.Components.ComponentBase
. Esta clase abstracta proporcionada por el framework hace que podamos centrarnos en escribir nuestro código, al encargarse de gestionar aspectos básicos de los componentes como su creación, inicialización, renderizado, el ciclo de vida u otros aspectos de infraestructura.
Pero aunque heredar de ComponentBase
es la inmensa mayoría de las veces la mejor opción, no tiene por qué ser así necesariamente. Blazor reconoce como componente cualquier clase que implemente IComponent
, una pieza mucho más pequeña.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Ver el código fuente generado por source generators
José María Aguilar - Establecer textos por defecto y localizados en validaciones de ASP.NET Core MVC
José María Aguilar
.NET Core / .NET
- ¿Qué es la carpeta "ref" que hay en los resultados de compilar un proyecto con .NET?
José Manuel Alarcón - Cost of exceptions
Gunnar Peipman - ICYMI C# 9 New Features: Reducing Code with Target-typed New Expressions
Jason Roberts - Test Your .NET HttpClient Based Strongly Typed Clients Like a Boss
Adam Storr - How to Compare Performance between .NET 5 and .NET Framework Controls
Denis Zmitrichenko - Functional monads in C#
Camilo Reyes - Conditional compilation for ignoring method calls with the ConditionalAttribute
Andrew Lock - Stop Saving to Disk with C# Asynchronous Streams
Lee Richardson - C sharp or B flat? Experiments in self-contained native executables in .NET
Scott Hanselman - A Practical Guide to Higher Order Functions in C#
Sam Walpole - Why is there a difference between decimal 0 and 0.0?
Colin Mackay
Es una gran alegría poder compartir con todos vosotros que Microsoft me ha reconocido por undécimo año consecutivo como Most Valuable Professional (MVP) en la comunidad de tecnologías para desarrolladores.
En esta ocasión, la notificación del nombramiento me pilló completamente desprevenido, apagando un fuego de los gordos provocado por un error en un servidor de producción, por lo que el fragor de la batalla no me dejó celebrar apropiadamente el momento, ni disfrutar la tensa espera que lo precede. Pero ya al llegar la calma, sí que he podido sentir de nuevo la emoción y orgullo que supone seguir perteneciendo un año más a este selecto grupo de locos por el software y la tecnología. ¡Once años ya, uau!
Muchas gracias a todos los que hacéis esto posible: a los que me estáis leyendo, porque sois los que día a día me dais motivos para continuar con este proyecto. No dudéis que sin vuestras visitas, comentarios y mensajes esto no tendría sentido.
Muchas gracias también al equipo del programa MVP, por su incansable labor en beneficio de la comunidad y su inestimable ayuda a los miembros del programa.
Y como no podía ser de otra forma, un agradecimiento infinito para mi mujer e hijas, por cederme el tiempo y espacio que necesito para desarrollar mi pasión.
Por último, me gustaría aprovechar la ocasión para felicitar a los MVP que renuevan este año y animarlos a continuar regalándonos tanto conocimiento y entusiasmo. Y también, por supuesto, una afectuosa bienvenida a los que acabáis de recibir vuestro primer reconocimiento; disfrutad el momento, porque no lo vais a olvidar jamás :)
¡Nos vemos!
Publicado en Variable not found.

Me encanta que el lenguaje C# vaya introduciendo características que consiguen que cada vez tengamos que escribir menos para conseguir lo mismo, y, sobre todo, si la legibilidad posterior del código no se ve comprometida.
Uno de estos casos son los recientes target-typed new expressions, o expresiones new con el tipo del destino, que básicamente permite evitar la introducción del tipo de datos al usar el constructor de una clase, siempre que el compilador sea capaz de inferirlo por su contexto.
Vamos a echarle un vistazo en este post.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Analiza tu código a fondo y desde distintas perspectivas con NDepend
José María Aguilar - Localizar errores de validación del binding en ASP.NET Core MVC
José María Aguilar
.NET Core / .NET
- What's new in Windows Forms in .NET 6.0 Preview 5
Igor Velikorossov - C# Type Conversion (and Coffee!) • Programming is Fun
Janell Baxter - What is the difference between Reflection and dynamic keyword in C#?
Shivprasad Koirala - Default Your FirstOrDefault in .NET 6.0
Adam Storr - Exploring Fluent Assertions
Gérald Barré - Abusing C# binding redirects for fun and profit - Injecting custom code without modifying files
Bill Wilson - Customized JSON formatting with Serilog
Nicholas Blumhardt - ICYMI C# 9 New Features: More Pattern Matching Features
Jason Roberts - Package Validation
Anirudh Agnihotry - Understanding async/await State Machine in .NET
Mykhailo Konovalov - CompactExifLib: Access to EXIF Tags in JPEG, TIFF and PNG Files
Hanns-Peter Kalb

Hace algunas semanas echamos un vistazo rápido a Blazor UI Components, la suite de componentes profesionales para Blazor proporcionada por Syncfusion.
Como vimos, se trata de una completa colección que soluciona las necesidades más habituales durante la creación de la interfaz de usuario de aplicaciones Blazor, tanto Server como WebAssembly. Más de 70 componentes que incluyen controles de entrada de datos, botones, calendarios, layouts, rejillas de datos o gráficas estadísticas, entre otros. Y lo mejor es que, aunque se trata de un producto comercial, su generosa licencia community permite que muchos podamos utilizarlos de forma totalmente gratuita.
Hoy vamos a profundizar un poco en los componentes de presentación de datos estadísticos, o Chart Components, que por su potencia, versatilidad y calidad del resultado merece un post en sí mismos.
Nota: lo que estáis leyendo es un post patrocinado por Syncfusion, pero en ningún momento han revisado previamente o condicionado de alguna forma su contenido.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: blazor, blazorserver, blazorwasm, componentes, sponsored, syncfusion
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- C# Source generators: metaprogramación en tiempo de compilación
José María Aguilar - Cargar automáticamente objetos del modelo en acciones ASP.NET Core MVC
José María Aguilar
.NET Core / .NET
- Announcing .NET 6 Preview 5
Richard Lander - Making Your Life Easier with C# Scripting
Peter Vogel - Caching Enum.ToString to improve performance
Gérald Barré - Conversation about diagnostics
Richard Lander - Setting Content for HttpClient Testing with JSON.NET and System.Text.Json
Adam Storr - Hot Reload for .NET Developers
Daniel Gomez Jaramillo - Migration of Bing’s Workflow Engine to .NET 5
Ben Watson - dotnet repl
Scott Hanselman - Running .NET Core Apps on a Framework other than Compiled Version?
Rick Strahl - ICYMI C# 9 New Features: Top-level Statements
Jason Roberts - C# Pattern Matching Quick Guide And Examples
Khalid Abuhakmeh - Conversation about networking
Richard Lander - Show a name and profile photo with .NET and Gravatar
Thomas Ardal - Quick Noda Time Conversions
Simon Timms - C# 10 -
record struct
Deep Dive & Performance Implications
Niels Rasmussen

No hace demasiado tiempo he descubierto en el framework la clase ActivatorUtilities
, una pequeña joyita disponible en Microsoft.Extensions.DependencyInjection
, que puede resultar interesante para implementar fácilmente factorías o cualquier tipo de código donde tengamos que instanciar manualmente clases con dependencias hacia servicios registrados en el contenedor de nuestra aplicación.
La clase estática ActivatorUtilities
ofrece básicamente tres métodos públicos:
CreateFactory()
, para crear factorías de objetos.CreateInstance()
/CreateInstance<T>()
, para crear instancias de objetos.GetServiceOrCreateInstance()
/GetServiceOrCreateInstance<T>()
, para obtener una instancia desde el inyector, o bien crearla manualmente conCreateInstance()
.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo crear bibliotecas de clases o proyectos de consola .NET 5 en lugar de .NET Core 3.1
José María Aguilar - Quizás no estés comparando con null de forma totalmente correcta
José María Aguilar
.NET Core / .NET
- Date, Time, and Time Zone Enhancements in .NET 6
Matt Johnso - Debugging C# Source Generators with Visual Studio 2019 16.10
Steve Collins - Different ways to check if a value is null in C#
Gérald Barré - Extending HttpClient Testing With Templating
Adam Storr - A Closer Look at 5 New Features in C# 10
Matthew MacDonald - Build apps for Microsoft Teams with .NET
John Miller - C# tip: how to get the index of an item in a foreach loop
Davide Bellone - In the Jungle of .NET Obfuscator Tools
Patrick Smacchia - Rediscovering implicit casting
Ken Bonny - Command Line Arguments and C# 9.0 Top Level Statement
Abhijit Jana - Show dotnet: Running my .NET nanoFramework for 8 years on a battery
Laurent Ellerbach - A C# Library to Implement Array Tries
Jorge Luis Orejel

Blazor permite crear componentes que son ignorantes respecto al modelo de hosting que están utilizando en tiempo de ejecución. Es decir, si lo diseñamos apropiadamente, un componente podría funcionar indistintamente en Blazor Server y Blazor WebAssembly, lo cual sería ideal desde el punto de vista de su reutilización.
Sin embargo, desde el interior de estos componentes, a veces necesitaremos distinguir cuándo están siendo ejecutados en Blazor Server y cuándo en Blazor WebAssembly. ¿Cómo podemos conseguir esto? Pues tenemos muchas maneras...
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- ¿Aplicar [Authorize] a todos los controladores MVC de una carpeta?
José María Aguilar - Radzen Blazor Components: ¡ahora open source!
José María Aguilar
.NET Core / .NET
- New LINQ extensions in .NET 6 and benchmarks
Kristoffer Strube - Benchmarking 4 reflection methods for calling a constructor in .NET
Andrew Lock - Conversation about .NET interop
Richard Lander - Working With .NET 6’s PriorityQueue
Khalid Abuhakmeh - Quick Tip - Compiler Directives and Using Aliases to Ignore Tests
Adam Storr - Migrate or Port Your Old Legacy .net Projects to the .NET5
Sibeesh Venu - Interpreting async code in CPU traces
Mark Downie - Conversation about the .NET type system
Richard Lander - Customizing Serilog text output
Nicholas Blumhardt - The Roslyn analyzers I use in my projects
Gérald Barré - .NET 6: Collections Improvements
Jonathan Allen

Desde C# 7 podemos emplear patrones en expresiones is
o bloques switch
para especificar las condiciones que deseamos comprobar, y cada nueva versión del lenguaje sigue introduciendo novedades al pattern matching, haciéndolo cada vez más sencillo y cómodo de utilizar.
En particular, C# 9 ha añadido un montón de características interesantes destinadas a facilitar el uso de patrones, pero en este post vamos a centrarnos en las dos más importantes: los combinadores de patrones y los patrones relacionales.
Ahí van los enlaces recopilados durante la semana pasada, con muchas novedades de la Build 2021. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Si usas [EmailAddress] y [Url] para validar datos de entrada, ojo: ¡que hace tiempo que ya no validan mucho!
José María Aguilar - BenchmarkDotNet: Arañando microsegundos en proyectos .NET Core o .NET Framework
José María Aguilar
.NET Core / .NET
- Announcing .NET 6 Preview 4
Richard Lander - Introducing the .NET Hot Reload experience for editing code at runtime
Dmitry Lyalin - How to Easily Create Telegram Bot using C#
Uladzislau Baryshchyk - C# 9 init accessors and records
Tom Deseyn - .NET Basics
Dustin Morris - How to use MediatR Pipeline Behaviours
Gary Woodfine - Finding concurrency bugs in a .NET application using Coyote
Gérald Barré - Simple Example of Calling REST API with HttpClient in .NET 5.0
Adam Storr - OData In .NET 5
Jay Krishna Reddy - Running a .NET application as a service on Linux with Systemd
Maarten Balliauw - Using DateOnly and TimeOnly in .NET 6 - Steve Gordon
Steve Gordon - The Difference Between HTML and URL Encode In .NET
Khalid Abuhakmeh - Building a Source Generator for C#
Jonathan Allen