Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Retornar archivos estáticos desde una carpeta distinta a "wwwroot" en ASP.NET Core 6
José M. Aguilar - Filtros asíncronos en ASP.NET Core MVC
José M. Aguilar
.NET Core / .NET
- Getting Started with Primary Constructors in .NET 8 and C# 12
Anton Martyniuk - Don't Do This With Extension Methods
Adam Storr - C# 12: Collection expressions and primary constructors
Tom Deseyn - How to Convert a String to Byte Array in C#
Nick Cosentino - Using type aliases to make code clearer with generics
Gérald Barré - XML External Entity Attack and .NET Core
Bart Wullems - Hacking together an AsciiMath parser for .NET
Andrew Lock - C#: How to iterate over a dictionary?
Chris Pietschmann - Does readonly make your code faster?
Steven Giesel - Refactor your C# code with primary constructors
David Pine - C#: Console App that Accepts Command-Line Arguments
Chris Pietschmann - Try Catch in C#: The Basics You Need to Know
Nick Cosentino - .NET JsonElement and Schema Validation
Ian Griffiths - What’s new for .NET in Ubuntu 24.04
Richard Lander - Unit Testing with Semantic Kernel
Sophia Lagerkran - C# 13 Params Collections
Fons Sonnemans - Working with IAsyncEnumerable in C#
Camilo Reyes - Code It Any Way You Want: Comparison of Passing Parameters in Methods
David McCarter - How to Create a Zip File in Memory In C#
Matjaz Prtenjak - C# DateTime Format In A Nutshell
Ndepend Team - Type pattern matching in C# and TypeScript
Bart Wullems
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: enlaces
Cuando tenemos una colección de datos para procesar, es relativamente habitual tener que hacerlo por lotes, es decir, dividir la colección en partes más pequeñas e irlas procesando por separado.
Para ello, normalmente nos vemos obligados a trocear los datos en lotes o chunks de un tamaño determinado, y luego procesar cada uno de ellos.
Por ejemplo, imaginad que tenemos un método que recibe una lista de objetos a procesar y, por temas de rendimiento o lo que sea, sólo puede hacerlo de tres en tres. Si la lista de elementos a procesar es más larga de la cuenta, nos veremos previamente obligados a trocearla en lotes de tres para ir procesando cada uno de ellos por separado.
Tradicionalmente, es algo que hemos hecho de forma manual con un sencillo bucle for
que recorre la lista completa, y va acumulando los elementos en un nuevo lote hasta que alcanza el tamaño deseado, momento en el que lo procesa y lo vacía para empezar de nuevo.
Pero otra posibilidad bastante práctica, y probablemente más legible, sería pasar la lista de elementos previamente por otro proceso que retorne una lista de chunks, o pequeñas porciones de la lista original, para que luego simplemente tengamos que ir procesándolos secuencialmente. Es decir, algo así:
private char[] array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
private int chunkSize = 3;
var chunks = GetChunks(array, chunkSize); // [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j']
foreach (var chunk in chunks)
{
ProcessChunk(chunk); // 'chunk' sería un array de 3 elementos
}
Y la pregunta es, ¿cómo podríamos implementar ese método GetChunks()
en C#? Vamos a ver varias opciones.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Omisión condicional de propiedades al serializar con System.Text.Json
José M. Aguilar - Interpolación de cadenas en C# 6
José M. Aguilar
.NET Core / .NET
- Automated NuGet package version range updates in .NET projects using Renovate
Anthony Simmon - Improvements in the Using Directive for Additional Types in C#
Georgios Panagopoulos - The New C# Interceptors vs. AOP.
Marek Sirkovský - C# Optional Parameters Explained
NDepend Team - Linting and Code Formatting in .NET Projects
Hamed Shirbandi - 10 Advanced C# Tricks for Developers
Konstantin Fedorov - .NET 8 and C# 12 — Interceptors
Henrique Siebert Domareski - Streamline your container build and publish with .NET 8
Richard Lander - How to Use HttpOnly Cookie in .NET Core for Authentication and Refresh Token Actions
Marinko Spasojević - C# URI Concatenation
Bill Boga - Code It Any Way You Want: Checking Strings for Null
David McCarter - Computing code coverage for a .NET project
Gérald Barré - C# Regular Expression Benchmarks – How To Avoid My Mistakes!
Nick Cosentino - What’s New in .NET 8 for Developers?
Vinoth Kumar Sundara Moorthy - The Difference Between Invariance, Contravariance and Covariance in Generics in C#
Georgi Georgiev - Baseline Styling in BenchmarkDotNet
Januarius Njoku
Hace poco vimos cómo serializar y deserializar datos en JSON de forma personalizada usando custom converters e implementamos un ejemplo simple capaz de introducir en campos de tipo int
de .NET casi cualquier valor que pudiera venir en un JSON.
Pero como comentamos en su momento, la serialización y deserialización de objetos más complejos no es una tarea tan sencilla y requiere algo más de esfuerzo. En este post vamos a ver la solución para un escenario que creo que puede ser relativamente habitual: deserializar un objeto JSON a un diccionario Dictionary<string, object>
.
En otras palabras, queremos que funcione algo como el siguiente código:
using static System.Console;
...
var json = """
{
"name": "Juan",
"age": 30
}
""";
var dict = ... // Código de deserialización
WriteLine($"{dict["name"]} tiene {dict["age"]} años"); // --> Juan tiene 30 años
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Breakpoints temporales y dependientes en Visual Studio 2022
José M. Aguilar - Expresiones lambda en miembros de función de C# 6
José M. Aguilar
.NET Core / .NET
- .NET 9 Preview 3
James Montemagno - Introducing MSTest SDK – Improved Configuration & Flexibility
Marco Rossignoli - Integer Overflow Vulnerabilities in .NET
Jason Sultana - Creating ico files from multiple images in .NET
Gérald Barré - The Best Way to Assign an Initial Value to Auto-Properties in C#
Kundar Kumar - C# Regex Performance: How To Squeeze Out Performance
Nick Cosentino - How to Retrieve the Number of CPU Cores in C#
Lennart Pries - Handling Circular References When Working With JSON in .NET
Georgios Panagopoulos - Equip 3rd party types with a deconstructor
Steven Giesel - How to Set a Default User-Agent on an HttpClient in ASP.NET Core
Mandar Dharmadhikari
Este tema lo he debatido con colegas en varias ocasiones y creo que abordarlo aquí puede resultar interesante para algunos más que os estéis preguntando lo mismo a raíz de la tracción que, poco a poco, va tomando Blazor entre los desarrolladores web que trabajamos con el stack de tecnologías de Microsoft.
Voy a explicar mi punto de vista al respecto contemplando dos aspectos distintos, que creo que son los fundamentales para poder responder apropiadamente a esta pregunta:
- Si técnicamente sería posible reemplazar MVC por Blazor, esto es, si Blazor dispone de mecanismos suficientes para cubrir las necesidades de una aplicación que tradicionalmente se desarrollaría con MVC.
- Si la popularidad y difusión de Blazor podría llegar a alcanzar las cotas suficientes para convertirse en una alternativa completa y segura a MVC, en términos de madurez, estabilidad, soporte y tamaño de la comunidad. O en otras palabras, si Blazor como producto llegará a estar lo suficientemente consolidado como para poder reemplazar a MVC.
Vamos a analizar cada una de ellas.
Disclaimer: obviamente, todo lo que veréis a continuación son opiniones personales y, como tales, pueden ser discutibles. Si tenéis una opinión diferente, estaré encantado de leerla en los comentarios.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- ¿No te gusta que tus nuevos proyectos .NET usen top level statements? Pues Visual Studio y la CLI te lo ponen fácil
José María Aguilar - Interpolación de cadenas en C# 6
José María Aguilar
.NET Core / .NET
- Leer mensajes de un buzón de Office 365 con C# & Console application vs worker service
Sergio León - Getting the Method Name from a Task in C#
Bryan Hogan - Fastest Way to Check if a List is in Order in C#
Jeff Shergalis - Collection Initializer Performance in C#
Nick Cosentino - Easily navigate code delegates
Mark Downie - The .editorconfig files for .NET developers
NDepend - Json schema validation in .NET
Gérald Barré - Pattern matching and the compiler can be surprising
Steven Giesel - How to use xUnit to run unit testing in .NET and C#
David Grace - How to Validate a GUID in C#
Osman Sokuoglu - Enable tab completion for the .NET CLI in your terminal
Anthony Simmon - Testing Your Native AOT Applications
Marco Rossignoli - 24 Essential Async/Await Best Practices for Basic to Advanced C# Developers
Sukhpinder Singh - Just for Fun: A Five-Card Poker Library Using C#
James McCaffrey - Convert Excel to PDF in Just 5 Steps Using C#
Mohan Chandran - Examples of Composition in C# – A Simple Guide for Beginners
Nick Cosentino - Primary Constructor and Logging Don't Mix
Adam Storr
Hoy va un post rápido sobre una característica de C# 12 que, aunque pequeña, nos puede resultar interesante en determinadas situaciones y puede pasar fácilmente desapercibida entre todas las demás novedades de esta versión del lenguaje.
Hasta C# 11 (.NET 7), no teníamos forma de definir una expresión lambda con parámetros opcionales y valores por defecto, como podemos hacer en los métodos o funciones normales, lo que complicaba la implementación de algunos escenarios.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Añadir filas de datos a Google Sheets desde .NET
José María Aguilar - Expresiones lambda en miembros de función de C# 6
José María Aguilar
.NET Core / .NET
- .NET 7 will reach End of Support on May 14, 2024
Rahul Bhandari - C# 13: Allow ref and unsafe in iterators and async
Steven Giesel - How to Convert ReadOnlyMemory to a Byte Array in C#
Robinson Small - .NET 9: LINQ Enhancements: A Detailed Introduction
Sukhpinder Singh - Best Practices for Logging With Serilog
Ivan Gechev - Implementing Dijkstra's algorithm for finding the shortest path between two nodes using PriorityQueue in .NET 9
Andrew Lock - Programmatic Html to PDF Generation using the WebView2 Control
Rick Strahl - C# - Tips and Tricks 03 - Use static initialization
Josef Ottosson - Bing on .NET 8: The Impact of Dynamic PGO
Ben Watson