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