Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- El atributo CallerArgumentExpression, o cómo conocer las expresiones usadas como argumentos en llamadas a un método en C#
José María Aguilar - Value Converters en Entity Framework Core
José María Aguilar
.NET Core / .NET
- ¿Qué son los deconstructores en C# y para qué sirven?
Rubén Rubio - Things you might not know about CSharp - Duck typing
Stuart Blackler - Dependency Injection in .NET 6
Matthew Jones - C# StringBuilder and String vs StringBuilder in C# .NET
Sanjay M. - Finding a type declaration's namespace and type hierarchy: Creating a source generator
Andrew Lock - Tips for More Efficient .NET Logs
Assis Zang - Why non-defaultable value types are needed in C#
Steve Dunn - Tuple in C#
Marinko Spasojevic - Flow control in C#
Jessica Hill - DateTime as a Value Object
Steve Smith - State of the Windows Forms Designer for .NET Applications
Klaus Loeffelmann - Protobuf In C# .NET - Part 1 - Getting Started
Wade Gausden
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: enlaces
Vamos con la primera colección del año :) Aquí van los enlaces recopilados durante estas fiestas que, como de costumbre, espero que os resulten interesantes.
Por si te lo perdiste...
- Cómo evitar que entren argumentos nulos en métodos de C#: un recorrido histórico (y lo que nos trae el futuro)
José María Aguilar - Ámbito local implícito en sentencias using de C# 8
José María Aguilar
.NET Core / .NET
- Pasar argumentos en la aplicación de consola con Net 6 y Visual Studio 2022
Daniel Córdoba - Thirteen C# 10 features
Oleg Kyrylchuk - When to Use Static Classes in C#
Marinko Spasojevic - Difference Between Asynchronous Programming and Multithreading
Marinko Spasojevic - Creating .NET Project Templates
James McCaffrey - How to Detect if a Dictionary Key Exists in C#
Marinko Spasojevic - Things you might not know about CSharp - Using Params with Indexers
Stuart Blackler - Accurately Measure Elapsed Time (Execution Time) in C# .NET using Stopwatch Class
Pro Code - Chi-Square Test Using C#
- Upgrading from .NET Core 2.1 to .NET 6.0
Jason Sultana - Create your own Roslyn Analyzer
Ahd BK - How to stop forgetting to await an awaitable call
Dennis Doomen - .NET's Cryptographic One-Shots
Kevin Jones - C# Binary Search: Fast find of a free slot between 0 and uint.MaxValue
Patrick Smacchia - Customising generated code with marker attributes: Creating a source generator
Andrew Lock - Create Context-based Programming Models with .NET 6
Khalid Abuhakmeh - 10 Best C# NuGet Packages to Improve Your Productivity in 2022
Sangeetha Periyaiah - Deep C# - Inheritance
Mike James - System.Text.Json features in .NET 6
Oleg Kyrylchuk - Mini C# Extension Methods
Matthew Jones - Integrating Long Path Names in Windows Applications
Rick Strahl
Pues parece que comenzamos 2022 con deseos bastante parecidos a los que ya teníamos un año atrás: que la situación actual mejore y que la salud os permita ser felices y disfrutar de todo lo que os rodea. Algo hemos avanzado respecto al año pasado, pero aún nos queda mucho camino por recorrer para volver a la ansiada normalidad.
Pero bueno, independientemente de esto, seguro que lo que más estáis esperando en este momento es el tradicional post donde comentaremos las entradas más visitadas durante el pasado año, así que ahí va 😁
Hace ya mucho tiempo que C# inició un interesante camino para conseguir reducir la cantidad de código necesario para hacer cosas frecuentes, introduciendo la capacidad de hacer implícitas determinadas construcciones y, por tanto, ahorrándonos tiempo y pulsaciones de teclas innecesarias.
En esta línea, todos recordaréis el tipado implícito, que tanto debate abrió en el lanzamiento de C# 3, hace ya casi quince años:
// Antes de C# 3
List<string> strings = new List<string>();
// Usando tipado implícito
var strings = new List<string>();
Bastante tiempo después, ya con C# 10, el lenguaje nos regaló una nueva característica que iba en la misma dirección, las expresiones new
con el tipo destino. Éstas permitían construir objetos usando tipado implícito, aunque esta vez en el lado derecho de las expresiones:
// Antes de C# 10
public class MyClass
{
private Invoice invoice = new Invoice(123);
private Dictionary<string, Person> people = new Dictionary<string, Person>();
...
}
// Ahora
public class MyClass
{
private Invoice invoice = new (123);
private Dictionary<string, Person> people = new ();
...
}
También en C# 10 nos hemos encontrado con los using
globales y using
implícitos, características ambas que nos permiten economizar esfuerzos evitando la introducción repetitiva de directivas para la importación de namespaces en el código.
Pues bien, aquí viene la siguiente vuelta de tuerca :) Unas semanas atrás, Immo Landwerth (Program manager de .NET en Microsoft) sorprendía a todos con esta afirmación sobre una de las características principales del próximo C# 11:
Ante todo, espero que estés pasando unas muy felices fiestas y con buena salud, a pesar de las circunstancias complicadas que nos rodean. Espero que pronto podamos salir de todo esto y volver a la normalidad.
Y mientras tanto, os paso algunos enlaces recopilados durante la semana pasada, que espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Generación de rutas con parámetros de query string en Blazor 6
José María Aguilar - Constructores con parámetros en entidades EF Core
José María Aguilar
.NET Core / .NET
- Microsoft .NET History
Lazie Wouters - Ensuring Santa’s Success With Automated Tests (C# Advent 2021)
Sean Killeen - Reentrant (Recursive) Async Lock is Impossible in C#
Max Fedotov - Third-Party DI Container And Autofac
Marinko Spasojevic - Getting Roslyn (C# compiler) and Language versions
Gérald Barré - AutoMapper runtime mapping control via IMappingOperationOptions
Adam Flow - Cancelling IAsyncEnumerable in C#
Jeremy Clark - How to compare two files using .NET, really really fast!
Sungu, Hasan Emrah - Why C# goes well with TypeScript
Nate Hill - How to Convert Char Array to String in C#
Marinko Spasojevic - Integration testing and NuGet packaging: Creating a source generator
Andrew Lock - Refactoring with C# 10
Jonathan Danylko - Using DateOnly and TimeOnly in .NET 6 to Simplify Your Code
Christopher C. Johnson - gRPC client-side load balancing in .NET
Rebin Qadir - How to Generate Random Numbers From a Range in C#
Marinko Spasojevic - 5 Easy Ways to Protect Excel Data in C#
Mohan Chandran - As and Is Operators in C#
Marinko Spasojevic
Parece que uno de los objetivos de C#10 es eliminar código de los archivos de código fuente de C#, simplificando su codificación y lectura. Lo hemos visto con la introducción de características como directivas using
globales o los using
implícitos: en ambos casos se ahorraba espacio en vertical sustituyendo los using
declarados individualmente en cada archivo por directivas aplicadas de forma global al proyecto, bien de forma explícita o implícita.
En cambio, los espacios de nombre con ámbito de archivo o namespace declarations permiten ahorrar espacio en horizontal, evitando un nivel de indentación en el código que la mayoría de las veces es innecesario.