Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Detectar la prerenderización en Blazor
José María Aguilar - Desordenar un array en C# y VB.NET
José María Aguilar
.NET Core / .NET
- Announcing .NET 6 Preview 3
Richard Lander - Announcing Open Source C# standardization
Bill Wagner - Migrando desde Net Core 2.2 a Net 5.0 y/o 6.x
Juan Luis Guerrero - Back to Basics: What Is a Delegate?
Hasan Hasanov - Performance Improvements in NuGet
Nikolche Kolev - What's Cool in C# 8 and .NET Core 3
Peter Vogel - Async/Await Explained with Diagrams and Examples
David Deley - C# 9 - Making your code simpler
Damir Arh - The pain points of C# source generators
James Turner - Announcing Facteur, a mailing kit for .NET
Hendrik Bulens - C# 9 pattern matching
Tom Deseyn
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: enlaces
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Generar redirecciones HTTP 307 y 308 en ASP.NET Core MVC
José María Aguilar - Cómo personalizar los mensajes de error de conexión en Blazor Server
José María Aguilar
.NET Core / .NET
- Announcing Project Reunion 0.5!
Andrew Clinick - Serilog.Expressions 2.0 update
Nicholas Blumhardt - Viewing app configuration using Oakton's Describe command and Spectre.Console
Andrew Lock - The .NET Stacks #43: DateTime might be seeing other people
Dave Brock - Be careful when mixing ValueTask and Task.Run
Gérald Barré - C# 9 (Two Decades of C#: A Reference)
Ben Bowen - The Future of Windows Apps, Demystified
Matthew MacDonald - C# .NET - How to get the proper length of a Unicode string
Metadata Consulting - .NET Standard 1.3 is no longer supported in AWS SDK for .NET version 3.7
Alex Shovlin - Jump-starting Migration to .NET Core with Upgrade Assistant
Richard Reedy - C# 9 top-level programs and target-typed expressions
Tom Deseyn - 8 Books to Improve as a .NET Developer
Patrick Smacchia
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Valores y parámetros en cascada con Blazor
José María Aguilar - ¿Aún usas ToString() para obtener el nombre de los elementos de un enum?
José María Aguilar
.NET Core / .NET
- ICYMI C# 8 New Features: Asynchronous Streams
Jason Roberts - Debugging .NET Core memory issues (on Linux) with dotnet dump
Tess Ferrandez - Cloud-Native learning resources for .NET developers
Nish Anil - Creating Resilient Microservices in .NET with Polly
Marinko Spasojevic - Fusing await using and await foreach and await
Jiří Činčura - Rewriting git history using C# (git filter-branch alternative)
Gérald Barré - Two Decades of C#: A Reference: C# 5 and C# 6 & C# 7
Ben Bowen - Getting Started with the Roslyn APIs: Writing Code with Code - Steve Gordon
Steve Gordon - Testing Web Applications with PlayWright and C#
Anuraj Parameswaran - Easy generation of fake/dummy data in C# with Faker.Net
Kristoffer Strube - Easily Perform LINQ Mocking to Unit Test ASP.NET Core Application
Priyanka - Practical differences between C# vs Vb.Net
Michał Białecki - Loop alignment in .NET 6
Kunal Pathak - 4 Features Every Developer Must Know in C# 9.0
Prasanth R - Using Tuples in C# to Initialize Properties in the Constructor and to Deconstruct Your Object
Thomas Claudius Huber
Como probablemente ya sabréis, NDepend es una de esas herramientas que están ahí de siempre, ayudando a desarrolladores y arquitectos a mejorar la calidad de nuestro software gracias a sus potentes y flexibles herramientas de análisis de proyectos.
Hace tiempo ya echamos por aquí un vistazo, pero creo que es interesante darle otra vuelta y refrescar conocimientos.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: arquitectura, buenas prácticas, calidad, herramientas
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo detectar navegadores que no soportan Blazor WebAssembly
José María Aguilar - Cómo incluir scripts en la página desde vistas parciales ASP.NET Core MVC con DynamicSections
José María Aguilar
.NET Core / .NET
- Referencias anulables en C# 8.0 y posteriores (II): el operador ! & Referencias anulables en C# 8.0 y posteriores (III): aplicaciones del operador !
Octavio Hernandez - .NET News Roundup - Week of Mar 8th, 2021
Arthur Casals - Unit Testing 101: Write your first unit test in C# with MSTest
Matthew Jones - Exploring the async/await State Machine – Concrete Implementation
Vasil Kosturski - CompactExifLib: Access to EXIF Tags in JPEG Files
Hans-Peter Kalb - Fix me!
Stéphane Gay - Use C# to upload files to a GitHub repository
Dave A. Brock - HelpMate.Core 2.1.0 Released!
Vincent Maverick Durano - Real Time WinUI Dashboard with SignalR Backend
Sam Basu - Visual Basic 16.9 in .NET 5
Jonathan Allen - OpenTelemetry .NET reaches v1.0
Sourabh Shirhatti - C# 9 records as strongly-typed ids - Part 5: final bits and conclusion
Thomas Levesque - C# 10 — 3 Candidate Features That Could Make the Final Cut
Matthew MacDonald - Strings Contain Empty Strings
Steve Fenton - The .NET Stacks #41: Your monthly preview fix has arrived
Dave Brock - C# 2, 3 and 4 (Two Decades of C#: A Reference) • Ben Bowen's Blog
Ben Bowen
Como decíamos hace unos días, los generadores de código C# nos brindan la posibilidad de crear al vuelo código C# e incluirlo en nuestros proyectos en tiempo de compilación.
Por no alargar demasiado el post, vimos un sencillísimo ejemplo de implementación, pero ahora vamos a crear algo más complejo que podría ayudarnos a solucionar un problema que tendría difícil solución de no contar con esta característica del compilador.
1. Definición de objetivos
El reto al que vamos a enfrentarnos ya lo expusimos en el post anterior como un caso de uso simple de los generadores de código, así que vamos a reproducir la descripción del escenario.
Imaginemos que en nuestra aplicación tenemos clases que representan operadores matemáticos como SumOperator
, MultiplyOperator
, DivideOperator
, SubtractOperator
. Imaginad también que nos interesa tener un tipo enum Operators
donde aparezca un miembro por cada operador disponible, algo como:
public enum Operators
{
Sum,
Multiply,
Divide,
Subtract
}
El problema que tiene enfocar esto de forma manual es que resultaría sencillo implementar una nueva clase operador y olvidar crear su correspondiente entrada en la enumeración Operators
. Aquí es donde vienen al rescate los generadores de código :)
Lo que implementaremos hoy es un generador de código C# que creará la enumeración por nosotros en tiempo de compilación, manteniéndola sincronizada en todo momento con las clases que tengamos definidas en el proyecto. Para ello, crearemos un generador llamado OperatorsEnumGenerator
que:
- En la fase de análisis de código recopilará las clases del proyecto a compilar cuyo nombre finalice por
Operator
. - En la fase de generación de código creará el enum con los miembros registrados anteriormente.
¡Vamos allá!