martes, 11 de julio de 2017
ref
. Aunque su alcance era algo limitado, nos permitía coquetear con punteros para cubrir de forma eficiente algunos escenarios y permitirnos algunos usos avanzados, pero sin necesidad de abandonar la seguridad que nos ofrece el entorno de ejecución de .NET.Un ejemplo clásico es el uso de
ref
para intercambiar dos valores desde un método:int one = 1, two = 2; Swap(ref one, ref two); Console.WriteLine($"{one},{two}"); // 2,1 ... void Swap<T>(ref T a, ref T b) { var temp = a; a = b; b = temp; }En C#7, el ámbito de uso de las referencias se ha ampliado bastante gracias a la introducción de dos nuevas características en el lenguaje:
- El soporte para variables locales de tipo referencia, o ref locals.
- La capacidad de un método o función de retornar referencias, también conocida como ref returns.
Veamos en qué consisten.
lunes, 10 de julio de 2017
.NET/.NET Core
- The week in .NET – Links!
Bertrand Le Roy - Porting a 15 year old .NET 1.1 Virtual CPU Tiny Operating System school project to .NET Core 2.0
Scott Hanselman - .NET Core solution management via the command line interface
Joseph Woodward - Debouncing and Throttling Dispatcher Events
Rick Strahl - ConcurrentDictionary allocates … a lot
Rick Brewster - Estrategias para controlar las excepciones en C#
Albert Capdevila - C# 7 Series, Part 4: Discards
Mark Zhou - When you use the Polly circuit-breaker, make sure you share your Policy instances!
Andrew Lock
martes, 4 de julio de 2017
En esta ocasión veremos un par de pequeñas adiciones al lenguaje que, aunque de mucho menor calado de otras que ya hemos repasado, también merecen tener su minutillo de protagonismo ;)
lunes, 3 de julio de 2017
.NET/.NET Core
- The week in .NET – .NET Conf, Material Design in XAML Toolkit
Bertrand Le Roy - Sobre NuGet y versiones…
Eduard Tomás - .NET Core: Finding out SDK-, installed runtime-, and Framework Host versions
Iris Classon - Announcing .NET Core 2.0 Preview 2
Rich Lander - Speed of dotnet run vs the speed of dotnet for published apps (plus self-contained .NET Core apps)
Scott Hanselman - Hashing, Encryption and Random in ASP.NET Core
Paul Hiles - Installing Additional App Templates for dotnet new
Steve Smith - Exploring CQRS within the Brighter .NET open source project
Scott Hanselman - .NET Framework June 2017 Cumulative Quality Update for Windows 10
Rick Lander - Performance Improvements in RyuJIT in .NET Core and .NET Framework
Joseph Tremoulet - C# Goes Back to BASICs with Local Functions
Tim Patrick - Generate C# API Documentation with Wyam
Derek Comartin
Aunque ya vayan siendo siete los galardones y quizás debería haberme acostumbrado un poco, no es así. Sigo sintiendo la misma mezcla explosiva de satisfacción, orgullo y alegría al recibir la tradicional notificación por email:
Me siento feliz de poder continuar estando cerca de este grupo de frikis que dedican parte de su tiempo a compartir conocimientos y aportar para que muchos podamos mejorar cada día subidos a hombros de gigantes. Y es todo un lujazo poder tener entre ellos a grandes amigos, porque, aparte de ser técnicamente brillantes, me he encontrado ahí con unas personas excepcionales.
Mi eterno agradecimiento al equipo del programa MVP en Microsoft, a la gran Cristina González, nuestra MVP lead, y a todos vosotros, amigos de Variable not found, porque al fin y al cabo sois los que hacéis posible que pueda sentirme tan afortunado.
Aprovecho también para dar la enhorabuena al resto de MVP nombrados el mismo día, ya sea por primera vez o renovando galardón.
Por último, me gustaría enviar un afectuoso abrazo para grandes amigos que este año han abandonado el programa (espero que temporalmente), pero que seguro seguirán dando caña con y para la comunidad porque ellos lo valen ;) ¡Aúpa chicos!
Publicado en Variable Not Found.
martes, 27 de junio de 2017
En realidad no es algo demasiado diferente a lo que hacemos normalmente cuando almacenamos en una variable local el resultado de un método que retorna un único valor:
// Guardamos el valor de retorno en variable local var sum = Sum(1, 3); Console.WriteLine($"Sum: {sum}"); ... static int Sum(int a, int b) { return a+b; }
lunes, 26 de junio de 2017
.NET/.NET Core
- The week in .NET – .NET Architecture: Microservices & Containers, On .NET with Omer Raviv on OzCode, Sprache
Bertrand Le Roy - Multi-Targeting and Porting a .NET Library to .NET Core 2.0
Rick Strahl - Mocking in .NET Core Tests with Moq
Jason Roberts - Abolishing Switch-Case Statement and Pattern Matching in C# 7.0
Nikola Živković - Perks of using UI for ASP.NET MVC
Matt Millican - Four ways to dispose IDisposables in ASP.NET Core
Andrew Lock - High-performance .NET by example: Filtering bot traffic
Alexandr Nikitin - Consuming Google.Apis.Sheets.V4 Services From C#
Tapan Kumar - C# - Make C# More Dynamic with Hyperlambda
Thomas Hansen - Understanding & Profiling C# Async Await Tasks
Matt Watson
martes, 20 de junio de 2017
Fijaos en un código como el siguiente, que seguro que habéis escrito cientos de veces, donde utilizamos el constructor de una clase para recibir sus dependencias y almacenarlas en miembros de la instancia:
public class MyService: IMyService { private readonly IDependency _first; private readonly IAnotherDependency _second; public MyService(IDependency first, IAnotherDependency second) { if (first==null) throw new ArgumentNullException("first"); if (second == null) // O mejor, usando el operador nameof throw new ArgumentNullException(nameof(second)); _first = first; _second = second; } ... }
lunes, 19 de junio de 2017
.NET/.NET Core
- The week in .NET – On .NET with Mattias Karlsson on Cake, Topshelf
Bertrand Le Roy - How to reference a .NET Core library in WinForms - Or, .NET Standard Explained
Scott Hanselman - How the .NET Runtime loads a Type
Matt Warren - Creating your first shared library in .NET Core
Paul Hiles - My Favorite C# 7 Feature: More expression-bodied members
James Montemagno - The TDLR; on easily managing .NET concurrent asynchronous threads
Michael Ballhaus - Hangfire: Task Scheduler for .NET
Ilya Chumakov - C# 7.x and 8.0: Uncertainty and Awesomeness
Erik Heemskerk - Calling Web Services with HttpWebRequest, WebClient and HttpClient
Peter Vogel - Automate Testing and Running Apps with dotnet watch
Steve Smith - Viva, Visual Basic! Or, Does VB Have a Future?
Michael Domingo - Visual Basic and Cross-Platform: Mobile Apps with VB, Xamarin, and .NET Standard!
Klaus Löffelmann - Microsoft .NET Framework 4.7 is available on Windows Update, WSUS, and MU Catalog
Jamshed Damkewala - How to build / publish self contained .NET Core binaries for Windows, Linux and OSX
Christophe Diericx - AutoMapper 6.1.0 released
Jimmy Bogard
martes, 13 de junio de 2017
En esta ocasión nos centraremos en la vuelta de tuerca que se ha dado a las tuplas a nivel de lenguaje, reforzándolas como first-class citizens para los desarrolladores C#.
lunes, 12 de junio de 2017
.NET/.NET Core
- The week in .NET – On .NET with Brett Morrison, DateTime Extensions
- Bertrand Le Roy
- Performance Improvements in .NET Core
Stephen Toub - Top .NET Software Errors: 50 Common Mistakes and How to Fix Them
Angela Stringfellow - Building the Ultimate RestSharp Client in ASP.NET and C#
Matthew Jones - An Early Look at C# 7.1: Part 1
Jonathan Allen - C# 7.1 and Beyond: Polishing Usability
Erik Heemskerk - Retaining (and altering) key functions when using Console.ReadKey()
Jasper Lammers - Iterators in C#: yield, IEnumerable & IEnumerator
Alan Zucconi - C# 7 Series, Part 3: Default Literals
Mark Zhou - Trying .NET Core on Linux with just a tarball (without apt-get)
Scott Hanselman - C# 7.2 and 8.0 Roadmap
Jonathan Allen
martes, 6 de junio de 2017
Esto hace que los navegadores, por supuesto siempre con el ánimo de preservar nuestra privacidad, sospechen del sitio web y muestren alertas como la siguiente, donde se nos informa de que el certificado es inválido y que alguien podría estar intentando robarnos información:
lunes, 5 de junio de 2017
.NET/.NET Core
- The week in .NET – Open XML SDK, Adventure Time
Bertrand Le Roy - .NET Core - Cross-Platform Code Generation with Roslyn and .NET Core
Alessandro Del Sole - C# 7 Series, Part 2: Async Main
Mark Zhou - The Fraternal Twins of Equals and GetHashCode
Tim Patrick .NET Standard, una librería para dominarlos a todos
Diego Bersano- Array Pool
Christian Nagel - The Coming .NET Renaissance
Aaron Stannard - Integration testing with .NET Core
Dmitriy Litichevskiy
miércoles, 31 de mayo de 2017
Tirando un poco del hilo, he encontrado con que se trata de una extensión interesante y que podría ser útil en algunos escenarios, por lo que voy a comentar por aquí lo que he ido viendo.
martes, 30 de mayo de 2017
.NET/.NET Core
- The week in .NET – .NET poster, Happy Birthday .NET with Jan Kotas, Skyworld
Bertrand Le Roy - Using .NET and Docker Together
Rich Lander - Working with Exceptions Before the Error Handler Does
Peter Vogel - Aspects of Strings in .NET
Timur Guev - .NET Framework May 2017 Cumulative Quality Update for Windows 10
Rick Lander - Experimenting with C# 7’s new features
Afzaal Ahmad Zeeshan - How to Send Email using .NET Core
Ben Cull - How do I Update a Nuget Package using dotnet CLI
Steve Smith - AsyncLock: an async/await-friendly locking library for C# and .NET
Neosmart Technologies - IEnumerable vs IReadOnlyList
Vladimir Khorikov - El patrón Singleton en C#
Albert Capdevila
martes, 23 de mayo de 2017
La cuestión que planteaba era relativa al mal funcionamiento de WebGrid cuando mostramos un campo de tipo enum y queremos ordenar por el mismo. Poco más o menos, me lo comentaba de la siguiente forma:
He incluido un campo enum en la clase del modelo y lo he incluido como columna en WebGrid.Obviamente, el hecho de que al cambiar a mano el parámetro
[…]
Todo funciona bien menos el WebGrid, que no me ordena por esa columna. Al hacer click en ella ordena de forma correcta ascendentemente pero al hacer click otra vez no te ordena de forma descendente, mirando la url se ve que sortOrder no varía sigue siendo ASC. si lo cambio a mano a desc me lo ordena bien. ¿Es que el webgrid no ordena enumeraciones? ¿Cuál sería la solución, si quiero ordenar?
sortOrder
todo funcionara bien, dejaba de manifiesto que el problema no estaba en el controlador ni en el modelo, dejando la vista como única sospechosa de provocar ese problema.Mis primeras respuestas iban orientadas a buscar un pequeño fallo en la forma de usar WebGrid o similar, porque me parecía algo bastante extraño, y, sobre todo, me parecía raro que no me hubiera pasado antes. José Antonio comentó, además, que había encontrado referencias por la red de que WebGrid tenía este problema, y que podía solucionarse si se forzaba una conversión de la enumeración a
string
a la hora de pasar los datos a la vista (!).Y tras hacer varias pruebas, efectivamente, parece que algo hay. No sé si categorizarlo como bug del componente, o simplemente un comportamiento algo oscuro y poco previsible del mismo, pero en cualquier caso es interesante conocer este problema para poder atajarlo con éxito.
lunes, 22 de mayo de 2017
.NET/.NET Core
- The week in .NET – Microsoft Build 2017, .NET Core 2.0 preview 1, For the King
Bertrand Le Roy - .NET Framework May 2017 Preview of Quality Rollup
Rich Lander - Qué es la plataforma .NET y cuáles son sus principales partes
CampusMVP - Adding a new Bytecode Instruction to the CLR
Matt Warren - BUILD 2017 Conference Rollup for .NET Developers
Scott Hanselman - Group Your Constants and Enums
Steve Smith - To box or not to Box? That is the question!
Sergey Teplyakov - Upgrading to .NET Core 2.0 Preview
Rick Strahl - Access to modified closure in Resharper/C#
Alex Lazarev - .NET Standard 2.0 is out and it’s impressive!!!!
Talking Dotnet - Hunting vulnerable NuGets in .NET Core
John Korsnes - .NET Core is Probably Fine
Aaron Stannard - How to keep up to date as a C# developer
Jakub Chodounsky - Covariance, Contravariance and Invariance in C#
Rashedul Hossain Khan - The meaning of 'null'
Christian Neumanns - Image recognition with C# and Emgu libraries
Emiliano Musso
martes, 16 de mayo de 2017
Muchas veces esto dependerá de los requisitos y el entorno del proyecto; por ejemplo, si nos interesa la capacidad para ejecutarlo o desarrollarlo sobre entornos Linux o Mac, nos tendremos que decantar por .NET Core, pues el framework completo sólo está disponible para Windows. También podemos encontrarnos con que necesitamos (re)utilizar componentes o bibliotecas que aún no han sido portadas a .NET Core, por lo que en este caso el target será .NET Framework (bueno, esto cambiará bastante con la llegada de Net Standard 2.0, pero de momento es lo que hay).
En cualquier caso, la decisión la tomamos justo en el momento de crear el proyecto en Visual Studio, al seleccionar la plantilla que usaremos como base:
Sin embargo, conforme el proyecto avanza, puede que esta decisión que tomamos tan al principio no sea del todo válida: quizás en su momento elegimos .NET Core, pero ahora debemos cambiar a .NET Framework. O al contrario, porque ahora necesitamos que nuestra aplicación sea multiplataforma. O tal vez necesitemos las dos cosas al mismo tiempo por si acaso…
Nota: aunque aún pululan por ahí aplicaciones creadas con versiones preliminares del SDK, basadas en el difunto project.json, aquí utilizaremos la versión 1.0 del SDK, que ya utiliza el nuevo .csproj. Si todavía no has migrado, ya estás tardando ;)
lunes, 15 de mayo de 2017
.NET/.NET Core
- The week in .NET – Microsoft Build 2017, .NET Core 2.0 status, Happy birthday .NET with Eilon Lipton, On .NET with Alfonso García-Caro on Fable, Stanford CoreNLP
Bertrand Le Roy - Managing dotnet Core 2.0 and dotnet Core 1.x versioned SDKs on the same machine
Scott Hanselman - Announcing .NET Core 2.0 Preview 1
Rick Lander - The .NET Core 2.0 Preview 1, version numbers and global.json
Andrew Lock - .NET Framework May 2017 Monthly Rollup
Rick Lander - .NET Core May 2017 Update
Lee Coward - Garbage collection and variable lifetime tracking
Sergey Teplyakov - Arrays and the CLR - a Very Special Relationship
Matt Warren - How we Added Auto-Retries to our C# API Client
Roger Jin - Garbage collection in C#
Jakub Chodounský - Creating nuget packages in .NET Core
Michal Dymel - ¿Qué son los filtros de excepciones en el lenguaje C#?
José Manuel Alarcón
miércoles, 10 de mayo de 2017
Once años dan para mucho, la verdad. Superamos ya las novecientas cincuenta publicaciones, más de 2.300 comentarios y 2,7 millones de páginas vistas según Blogger, cifras que van mucho más allá de lo que habría firmado sin dudarlo aquél mayo de 2006 cuando empezó este viaje.
Un viaje que no tiene destino ni fecha de finalización: el único objetivo es disfrutar del camino, que os puedo asegurar que lo estoy haciendo, y echar una manita a los compañeros de profesión y afición que anden buscando información o soluciones a problemas con las que yo me haya topado antes. ¿Hay algo más gratificante que esto?
martes, 9 de mayo de 2017
En un post anterior ya profundizamos un poco en las funciones locales, y hoy veremos en qué consisten las nuevas inline out variables, una característica muy útil que nos ahorrará escribir código en escenarios en los que siempre hemos tenido la sensación de que C# podía hacer algo más por nosotros.
lunes, 8 de mayo de 2017
.NET/.NET Core
- The week in .NET – .NET Architecture, .NET Core 2.0 status, Happy Birthday .NET with Matt Gertz, On .NET with Don Schenck on Red Hat, Fable
Bertrand Le Roy - C# 7.0 and Beyond with Mads Torgersen
Jakub Chodounsky - .NET Futures: Asynchronous Streams
Jonathan Allen - JSON.NET not just for serialization
Simon Timms - The curious case of async, await, and IDisposable
Bill Wagner - Using StringBuilder Length Property
gggustafson - Five Surprises after using .NET Core for six months
George Stockers - Announcing the .NET Framework 4.7 General Availability
Rich Lander
miércoles, 3 de mayo de 2017
Los que llevamos tiempo trabajando con paquetes NuGet, sabemos que la desinstalación de paquetes requería tradicionalmente entrar en la consola del gestor de paquetes, o bien usar el interfaz gráfico de este gestor de paquetes en Visual Studio, lo que era bastante lento y farragoso.
Y claro, como los humanos somos animales de costumbre, lo normal es que cuando damos el salto a ASP.NET Core continuemos haciéndolo de la misma forma, sin pararnos un segundo a replantearnos si hay mejores formas… lo que me recuerda a esta famosa imagen que anda por Internet desde hace bastante tiempo:
(Fuente: Ni idea)
Y claro, como los humanos somos animales de costumbre, lo normal es que cuando damos el salto a ASP.NET Core continuemos haciéndolo de la misma forma, sin pararnos un segundo a replantearnos si hay mejores formas… lo que me recuerda a esta famosa imagen que anda por Internet desde hace bastante tiempo:
(Fuente: Ni idea)
martes, 2 de mayo de 2017
.NET/.NET Core
- The week in .NET – Happy Birthday .NET with Chris Sells, free ASP.NET Core book, We are the Dwarves
Bertrand Le Roy - Contributing to .NET for Dummies
Rion Williams - TDDing into a Fibonacci Sequence in C# & Implementing a Fibonacci Sequence with Value Tuples in C# 7
Jeremy Clark - Spans and ref part 2 : spans
Marc Gravell - Common Multithreading Mistakes in C# - IV: Everything Else
Ben Bowen - Adding a Tool to a .NET Core Build
Samuel Cragg - C# Futures: Read-Only Local Variables & Relaxed Overrides
Jonathan Allen - Making string validation faster by not using a regular expression. A story
Maarten Balliauw - Surprise! Creating an instance of an open generic type
Jon Skeet - Arreglar el error de que falta un ensamblado en el GAC en una aplicación ClickOnce en una aplicación .NET
José Manuel Alarcón - Provide opt-out mechanism for new functionality using AppContext in .NET Core
Hisham Bin Ateya - 3D FaceViewer
Yang Kok Wah - Void-Free Style in C# 7.0
Lukáš Lánský - Using AutoMapper in Domain Objects with DotNet Core
Gary Woodfine
martes, 25 de abril de 2017
Y hoy vamos a comenzar con las funciones locales, una nueva capacidad que nos permitirá crear funciones locales a un ámbito, y que no serán visibles desde fuera de éste. Por ejemplo, podemos crear funciones en el interior de métodos, constructores, getters o setters, etc., pero éstas sólo serán visibles desde el interior del miembro en el que han sido declaradas.
Puede ser útil en determinados escenarios, puesto que evitan la introducción de "ruido" en las clases cuando determinado código sólo se va a consumir en el interior de un método, y al mismo tiempo pueden contribuir a mejorar la legibilidad y robustez del código.
lunes, 24 de abril de 2017
.NET/.NET Core
- The week in .NET – Happy birthday .NET with Robin Cole, TinyORM, 911 Operator
Bertrand Le Roy - Covariant and Contravariant Casting is 3x Slower than Dynamic
Daniel Cabtree - Spans and ref part 1 : ref
Marc Gravell - A tricky bit of code
Ayende Rahien - A C# developers guide to F#
Connel Hooley - Exploring Tuples as a Library Author
Marc Gravell - .NET Code Quality 3rd Party Tools – Using NDepend with .Net Core
Daniel Jimenez Garcia - What is an Unhandled Exception, and How to Catch All C# Exceptions
Matt Watson - Value Tuples in C# 7: Please Tell Me I'm Doing This Wrong
Jeremy Bytes - Emojis and String.Length
Spencer Schneidenbach - C# Tuples: New C# 7 language feature
Matthew D. Groves - C# Futures: Nullable Reference Types
Jonathan Allen - How to Generate C# Random Numbers, Pseudo vs Secure Random Numbers
Matt Watson
martes, 18 de abril de 2017
.NET/.NET Core
- The week in .NET – .NET Framework 4.7, reference documentation, On .NET on modular ASP.NET, Happy birthday .NET with Immo Landwerth, JustAssembly
Bertrand Le Roy - Casting to IEnumerable<T> is Two Orders of Magnitude Slower
Daniel Cabtree - MailKit Officially Replaces .NET’s SmtpClient
Jonathan Allen - Creating and editing solution files with the .NET CLI
Andrew Lock - .NET Framework April 2017 Monthly Rollup
Rich Lander - .NET Futures: Multiple Inheritance
Jonathan Allen - Extending .NET CLI with custom tools - dotnet init initializes your NuGet package
Maarten Balliauw - Exceptionless - better logging for .NET & JavaScript
Michal Dymel - How to Create .NET Core Windows Services with Visual Studio 2017
Matt Watson - Performant text processing in C#
Christopher Wright - Method overload resolution in C# 6.0: an interesting bug story
Miłosz Piechocki
lunes, 10 de abril de 2017
.NET/.NET Core
- Announcing the .NET Framework 4.7
Rich Lander - C# 7: Is Operator Patterns - You won't need 'as' as often & Micro-Benchmarking the Three Ways to Cast Safely
Daniel Cabtree - The week in .NET – On .NET on SonarLint and SonarQube, Happy birthday .NET with Dan Fernandez, nopCommerce, Steve Gordon
Bertrand Le Roy - Understand monads with LINQ
Miłosz Piechocki - Announcing a unified .NET reference experience on docs.microsoft.com
Jeff Sandquist - Black Art – LINQ expressions reuse
Asher Barak - Getting All the Results in LINQ with Methods
Peter Vogel - C# Exception Handling Best Practices
Matt Watson - C# 7.0: Tuple literals
Gunnar Peipman - No GCs for your allocations?
Maoni Stephens - A Quick and Dirty Extension Method to Get the Full Exception Details, Including Inner Exceptions
Barco Bertschi