Cuando aparece una nueva versión de C# o .NET, los titulares de las noticias, tweets y posts suelen girar en torno a las novedades más destacadas, aquellas que suponen cambios importantes respecto a versiones anteriores. Pero es habitual que, aparte de éstas, se añadan otras características más pequeñas que muchas veces pasan desapercibidas.
Esto es lo que ocurre con al atributo [CallerArgumentExpression]
, una joyita de C#10 que puede ayudarnos a hacer más descriptivos los mensajes de error y trazas que guardamos cuando aparece un error en nuestras aplicaciones.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- ¿Por qué llamamos "uppercase" y "lowercase" a mayúsculas y minúsculas?
José María Aguilar - ¿Se pueden asociar varias interfaces a la misma instancia en el contenedor de servicios de ASP.NET Core?
José María Aguilar
.NET Core / .NET
- DateOnly and TimeOnly support with System.Text.Json
Marco Minerva - Updating your project to use File Scoped Namespaces
Gérald Barré - Best keyboard shortcuts for .NET development
Piotr Bach - What’s New in C# 10: Simplify Argument Null Checking Code & Easier Lambda Expressions & New Possibilities for Validation and Logging Methods
Jason Roberts - Bending .NET - Common Flat Build Output
Niels Rasmussen - What’s New in C# 10: Write Less Code and Reduce Repeated Using Directives
Jason Roberts - [CallerArgumentExpression] and throw helpers: Exploring .NET Core 6
Andrew Lock - A .NET 5.0 Guide: From Idea To NuGet Package
Khalid Abuhakmeh - Modern C# Hello World
Patrick Smacchia - How to parse JSON Lines (JSONL) with C#
Davide Bellone - Named Pipes in .NET 6 with Tray Icon and Service
Erik Engberg - dotnet-script 1.3 is out with .NET 6.0 support
Filip Woj - When String.GetHashCode() in .NET C# Drives You Crazy
Ahmed Tarek - Everything That Every .NET Developer Needs to Know About Disposable Types: Using Tools to Find Issues
David McCarter - C# 10 Record Structs
Joe Mayo - Creating an Async Web API with ASP.NET Core
Pro Code Guide - Windows Authentication with HttpClient
Rick Strahl
Estamos muy acostumbrados a comenzar nuestros métodos realizando comprobaciones para evitar que pasen a nuestro código valores nulos que pudieran romper la aplicación.
Desde el principio de los tiempos, estas guardas han presentado el siguiente aspecto:
public class MyService
{
public void MyMethod(object first, object second)
{
if(first == null)
{
throw new ArgumentNullException("first");
}
if(second == null)
{
throw new ArgumentNullException("second");
}
// ...
}
}
¿Todo bien, verdad? El código es aparentemente correcto y fácil de comprender, pero... ¡demasiado extenso! Hemos consumido casi diez líneas de código sólo realizando comprobaciones de "fontanería", y ni siquiera hemos empezado a plantear la funcionalidad real del método.
Afortunadamente, con el tiempo C# ha ido evolucionando y mejorando sucesivamente este escenario tan frecuente.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Publicando nuestra web sobre Azure Web Apps
Jorge Turrado - 5 motivos por los que tus acciones MVC reciben objetos vacíos o nulos en ASP.NET Core
José María Aguilar
.NET Core / .NET
- Más novedades de .NET 6, PriorityQueue
Javier Suárez - 1.0 stable release of Windows App SDK is now LIVE!
Dina Ayman - Infer# v1.2: Interprocedural Memory Safety Analysis For C#
Xin Shi - The Case for C# and .NET
Charles Chen - What's new in Windows Forms in .NET 6.0
Igor Velikorossov - Setting up Serilog in .NET 6
Nicholas Blumhardt - C# 10 new feature CallerArgumentExpression, argument check and more
Dixin Yan - Azure Active Directory's gateway is on .NET 6.0!
Avanindra Paruchuri - Monitoring a .NET application using OpenTelemetry
Gérald Barré - New dependency injection features in .NET 6: Exploring .NET Core 6
Andrew Lock - C# Tip: Use a SortedSet to avoid duplicates and sort items
Davide Bellone - Exploring C# 10: Use Extended Property Patterns to Easily Access Nested Properties
Dave Brock - .NET 6 vs .NET 5: up to 40% speedup!
Alex Yakunin
Hasta Blazor 6, daba la impresión de que la query string era un ciudadano de segunda clase en el sistema de routing, pues no se ofrecían mecanismos sencillos para la obtención de parámetros suministrados a través de esta vía, ni tampoco para la generación de URI que los utilizaran. De hecho, estas tareas teníamos que solucionarlas manualmente, aunque fuera con ayuda de paquetes externos como Microsoft.AspNetCore.WebUtilities
.
Ya con la llegada de esta versión, Blazor incorpora de serie herramientas que nos harán esto más llevadero, como su integración con el binding o, lo que veremos en este post, la posibilidad de generar direcciones que incluyan este tipo de parámetros.
Ahí van los enlaces recopilados durante la semana pasada, obviamente muy condicionados por la oleada de lanzamientos de nuevas versiones de casi todo. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Si las shadow properties no existen como propiedades en la entidad, ¿cómo podemos inicializarlas en el seed de Entity Framework Core?
José María Aguilar - CRUD en Blazor usando el componente DataGrid de Syncfusion
José María Aguilar
.NET Core / .NET
- Announcing .NET 6 - The Fastest .NET Yet
Richard Lander - Welcome to C# 10
Kathleen Dollard - What’s New for Visual Basic in Visual Studio 2022
Kathleen Dollard - F# is officially here!
Kathleen Dollard - Announcing dotnet monitor in .NET 6
Sourabh Shirhatti - How to Fully Cover .NET C# Console Application With Unit Tests
Ahmed Tarek - Executing ad hoc C# code snippets
Dominique St-Amand - Bite-Size .NET 6 - UnionBy, IntersectBy, ExceptBy, and DistinctBy
Matthew Jones - Asynchronous Programming in .NET Core C#
Pro Code Guide - Top 6 Features in the new .NET Version & Top 5 Features in the new C# Version
Nikola M. Zivkovic - Source generator updates: incremental generators: Exploring .NET Core 6
Andrew Lock - GIFs in Console Output Using ImageSharp and Spectre.Console
Khalid Abuhakmeh - C# Delegates
Marinko Spasojevic - WhenAny and Pattern Matching with Different Types of Task
Bryan Hogan - C# 10 Falls Just a Bit Short
Matthew MacDonald - Single File Apps In .NET 6
Wade Gausden - How C# 10.0 and .NET 6.0 improve ArgumentExceptions
Ian Griffiths - Dissecting Interpolated Strings Improvements in C# 10
Sergey Teplyakov - Building a project that target .NET Framework 4.5 in Visual Studio 2022
Thomas Levesque - Why Does x = ++x + x++ Give Me the Wrong Answer?
OriginalGriff - Overriding Sealed Methods in C#
Adam Furmanek
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Shadow properties en Entity Framework Core
José María Aguilar - ¿Se pueden crear componentes Blazor que no hereden de ComponentBase o alguno de sus descendientes?
José María Aguilar
.NET Core / .NET
- .NET 6: DateOnly y TimeOnly & File Scoped Namespaces & Global Usings
Javier Suárez - Enums in C#: hidden pitfalls
Sergey Vasiliev - ICYMI C# 9 New Features: Create Immutable Objects with Records
Jason Roberts - .NET Collections - IEnumerable, IQueryable, ICollection
Marinko Spasojevic - Bite-Size .NET 6 - MaxBy() and MinBy() in LINQ
Matthew Jones - Diagnostics tools for App Service on Linux
Mark Downie - Improving logging performance with source generators: Exploring .NET Core 6
Andrew Lock - A quick review of C# 10 new language features
Thomas Levesque - String Performance: Concatenating Strings
David McCarter - Discovering new C# String Pattern Matching Features
Rick Strahl - Caller Argument Expressions – A Look at New Language Features in C# 10
Rachel Appel
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo crear un paquete NuGet y publicarlo en Nuget.org
Jorge Turrado - Expresiones new con el tipo de destino en C# 9
José María Aguilar
.NET Core / .NET
- Calendario común de comunidades .NET de España
Javier Suárez - Google Sheets API with .NET Core
Marinko Spasojevic - Making Sense of Common C# Compiler Errors
Matt Eland - Parallel.ForEachAsync in .NET 6
Scott Hanselman - Bite-Size .NET 6 - PriorityQueue<T, N>
Matthew Jones - Dotnet Format and File Scoped Namespaces
Steve Smith - How to Get Rid of the INotifyPropertyChanged Boilerplate
Gael Fraiteur - How to test HttpClientFactory with Moq
Davide Bellone - Pattern Matching in C# for Beginners
Sowmiya V. - 5x Lessons Learned from Migrating a Large Legacy to .NET 5/6
Patrick Smacchia - Immutable C#
Sam Williams - Moq vs NSubstitute: syntax cheat sheet
Davide Bellone - File-Scoped Namespaces – A Look at New Language Features in C# 10
Khalid Abuhakmeh - What's new in .NET 6 and C# 10. Everything you wanted to know.
Oleksii Nikiforov - Everything That Every .NET Developer Needs to Know About Disposable Types: Properly Implementing the IDisposable Interface
David McCarter - Sorting large CSV files by multiple columns using C#
Josef Ottosson