Mostrando entradas con la etiqueta C#. Mostrar todas las entradas
Mostrando entradas con la etiqueta C#. Mostrar todas las entradas

jueves, 9 de febrero de 2017

WPF SearchAll Control (básico)





SearchAll es un control de WPF que realiza de filtrados de manera extremadamente sencilla. SearchAll reduce el tiempo y el esfuerzo y posee una interfaz muy amigable y cuidada. Este control está basado en el control de búsqueda de la página de formación Pluralsight, con la diferencia de que SearchAll es válido para cualquier tipo de datos, ya que es un control completamente genérico.

Vamos a ver todas sus bondades.



miércoles, 8 de febrero de 2017

WPF SearchAll Control essentials





SearchAll is very usefull XAML control for our searchs in our Forms (Windows) in WPF.















viernes, 20 de enero de 2017

Clonando Objectos en .NET Framework Parte II




Cuando publiqué la primera parte del artículo, decidí dejar fuera un modo más de clonación, el impulsado por Reflection. La decisión de dejarlo fuera vino principalmente porque hubiera querido abordarlo profundamente y pensaba que se podía alargar mucho y perder el sentido. A la vez en los comentarios de otras páginas especializadas me sugirieron también el modo  mediante Expressions Trees, algo que no conocía en este planteamiento, pero tratándose de Arboles de Expresiones, no era para nada lo que se puede decir sencillo.

Buscando más información, me topé con 2 fantásticas librerías en Git Hub, accesibles mediante Nuget, que funcionaban perfectamente bien y que hacen el trabajo de forma maravillosa, así que  ¿para qué reinventar la rueda?

En esta segunda parte trataré de explicar ejemplos con Nuclex y CloneExtensions, que nos permiten realizar clonados profundo, tanto en modo Reflection como Expression Trees.



Cloning Objects in .NET Framework Part II






Interesting nugets and conclusions for clonning objects.















martes, 27 de diciembre de 2016

Clonando Objectos en .NET Framework



En esta entrada vamos a tratar un par de formas o estrategias para realizar clonación de objetos en .NET Framework. Analizaremos los pros y las contras por cada uno de los métodos, ya que a día de hoy no existe una fórmula infalible para realizar esta tarea.


Todo lo que vamos a ver está dirigido al uso de clases, ósea a tipos por referencia que no sean clases inmutables (stringsdelegadosstructuras, etc), ya que éstas tienen un tratamiento diferente en memoria que se queda fuera del objetivo de este post.

Cloning Objects in .NET Framework




















domingo, 11 de diciembre de 2016

DataAnnotations In Depth II





Continuous with validations class with DataAnnotations.














domingo, 27 de noviembre de 2016

DataAnnotations In Depth I




Validations objects with DataAnnotations classes.
















jueves, 17 de noviembre de 2016

Generic IEqualityComparer -S-





En este post, hablaremos sobre la implementación genérica para IEqualityComparer.

Este tipo de implementaciones, son ideales, para gente vaga, y que le gusta aprovechar más su tiempo realizando otro tipo de tareas, que con copy/pastes prácticamente iguales.

IEqualityComparer  es una de las interfaces, más importantes dentro del mundo de LinQ.­­ Muchos de sus métodos más importantes, toman una  sobrecarga  con un parámetro de este tipo, o de una clase que deriva de esta interfaz. Ejemplos de ella son: Contains, Distinct, Except, Intersect, GrouBy, GroupJoin, Join, SecuenceEqual, ToDictionary, ToLookUp y Union.






Generic IEqualityComparer -E-





Powerful generic class for a generic abstraction of IEqualityComparer.














domingo, 6 de noviembre de 2016

Extendiendo LinQ




Como hemos mencionado en otros posts y en otras ocasiones, la librería principal de LinQ, System.Linq, está formada por un conjunto de métodos extensores que en la mayoría de los casos expande la funcionalidad del tipo IEnumerable<T>. Por este motivo, y por facilidad de generación de este tipo de métodos, alargar, dilatar, mejorar o incluso moldear muchos de ellos, se vuelve una tarea muy simple y en ocasiones bastante gratificante y útil.

 Os indico como recordatorio los enlaces para métodos extensores y generics, que son básicos para dominar el tema de hoy.



domingo, 30 de octubre de 2016

PLinQ 2



En este nuevo post de PLinQ, nos vamos a centrar en los métodos más importantes de ParalallelEnumerable, decimos los más importantes, ya que nos ofrecen una funcionalidad extra para nuestras consultas parametrizadas.

Cabe destacar, como nombramos en el anterior post de PLinQ, que la clase ParallelEnumerable, tiene una definición para cada uno de los métodos extensores (operadores de consulta) de la clase System.LinQ, para hacer completamente transparente su uso, de modo que pensemos que estamos utilizando una consulta simple a un IEnumerable.





sábado, 22 de octubre de 2016

PlinQ 1



A forma de introducción, PLinQ, ofrece la capacidad de realizar consultas LinQ To Objects, de forma paralela, ósea utilizando todos los cores (núcleos) de el microprocesador. En un primer vistazo, podemos pensar que esto es magia, pero como veremos a continuación, no es algo que sea 100% recomendable en todos los casos, y puede llegar a tener una serie de consideraciones y fallos, que o bien no conocemos o no estamos acostumbrados en la programación síncrona.

Una de las ideas que solemos tener en nuestra cabeza acerca de la programación en paralelo, es que si poseemos una máquina con 4 cores o microprocesadores, un trabajo que tarda en hacerse 20 segundos, debería de tardar 20/4, solo 5 segundos. Esto no es cierto, hay algunos casos en que la ejecución sobre un único núcleo es más rápida que sobre n. La diferencia radica, en que para poder hacer una ejecución en paralelo es necesario particionar la información en trozos, para que cada uno de estos, sea tratado por un núcleo y luego volver a fusionar la información. Todo este trabajo, conlleva un sobrecoste, que en ocasiones no es conveniente.

lunes, 16 de mayo de 2016

Let




Una entrada que pudiera ser no merecedora de un espacio para ella sola. La cláusula Let, tiene una serie de virtudes que van desde una mejora notable en la lectura y comprensión del código, hasta un incremento en el rendimiento por la reducción de llamadas redundantes.


La única nota negativa, pero no menos importante, es que esta cláusula, solo puede utilizarse con sintaxis de consulta (azúcar sintáctico), por lo que nuestras queridas Lambdas se quedan fuera.






domingo, 8 de mayo de 2016

Operadores de Conversión






Como su propio nombre indica, los operadores de conversión realizan transformaciones de datos de un tipo de colecciones a otras.


En este caso tenemos un grupo de operadores de conversión que son de ejecución instantánea, compuesta por los operadores ToList, ToArray, ToLookUp y ToDictionary, y otro grupo de carga perezosa o diferida, compuesta por OffType y Cast. De este último tipo también sería el operador AsEnumerable, pero en éste no pondremos mucho énfasis, ya que es un operador que se utiliza más en LinqToSql o LinqToEntities, y este curso es de LinqToObjects.





domingo, 1 de mayo de 2016

Operadores de Ordenación


Llegamos al grupo de operadores destinados a realizar el trabajo de ordenación en nuestras colecciones. Dentro de este apartado nos encontramos con un nuevo actor de este teatro, un actor que tiene una importancia mínima pero que forma parte de todo este tinglao, es la interfaz IOrderedEnumerable<TElement> . Es una interfaz super simple, que hereda de IEnumerable<TElement>  y de IEnumerable, y que simplemente añade un método CreateOrderedEnumerable, cuya función será la de crear las ordenaciones. Es importante nombrarla ya que será el tipo de devolución que generen nuestros operadores de ordenación OrderBy, OrderByDescending, ThenBy y ThenByDescending.

Llegados a este momento del repaso de LinQ, volveremos a ver las diferencias para estos operadores entre la sintaxis de consultas y nuestras queridas Lambdas.




martes, 19 de abril de 2016

Operadores de Agregación



Los Aggregate Operators, nos permiten realizar operaciones matemáticas de una temática simple sobre los elementos que forman una colección. Normalmente el resultado de estos, es un valor numérico, aunque no siempre es obligatorio.
La ejecución de todos estos operadores es inmediata, y se realiza justo en el momento de realizar la llamada, por lo que ninguno de ellos tiene ejecución diferida o perezosa.

En este conjunto de operadores, se diferencian tres tipos. Un primer tipo muy simple, compuesto por Count y LongCount. Un segundo grupo también bastante sencillo compuesto por Max, Min, Sum y Average y un tercero compuesto por el operador Aggregate, más complejo y potente. El primer grupo, posee sobrecargas sin parámetros, para secuencias numéricas sencillas y sobrecargas con filtrado (parámetro Func<T, bool>), que purifican la secuencia antes de aplicar el cálculo. Los métodos correspondientes al segundo grupo, poseen un número bastante considerable de sobrecargas, que van en concordancia con el tipo de datos sobre el que se aplica el cálculo, normalmente int, int?, double, doublé?, decimal, decimal?, long y long? En afinidad con su delegado genérico Func<T, int>, Func<T, int?>, Func<T, double>

jueves, 27 de agosto de 2015

Novedades C# 6.0 (Parte 3)






Vamos a finalizar esta serie de posts de novedades de C# 6.0, entrando en profundidad dentro de los apartados de Name of Expressions, la utilización de Await en los bloques catch y finally, y continuando con las excepciones, acabaremos con una novedad adoptada de Visual Basic, que no es otra que los bloques catchs condicionales o filtrado de excepciones.




domingo, 16 de agosto de 2015

Novedades C# 6.0 (Parte 2)




Esta segunda entrega de novedades de C# 6.0, la vamos a utilizar por completo para explicar el Null Conditional Operator (.?) o Evaluador de null en código. Parte de este operador, ya era un viejo conocido, utilizado en versiones anteriores, para realizar operaciones ternarias y en conjunción doble para tratamientos de valores nulos en tipos por referencia y en tipos nullables. En esta nueva versión, toma de nuevo protagonismo al vincularse con el punto (.) y nos intenta hacer la vida un poquito más fácil.


Vamos a ver de qué va.






martes, 11 de agosto de 2015

Novedades C# 6.0 (parte 1)




Vamos a hacer una pequeña pausa dentro de nuestro curso de LinQ, y aprovechando que la nueva versión de Visual Studio, del Framework y de C#, ya están en la calle, daremos un repaso a las nuevas características que nos trae el lenguaje del ‘C Sostenido’.

De primeras podemos decir que los cambios introducidos dentro de la nueva versión del lenguaje nativo de la plataforma .Net, no son, ni demasiado bestias, ni demasiado amplios, pero contribuyen y favorecen a una mejor lectura, compresión y organización de nuestro código.


Para intentar hacer que los posts, sean lo más didácticos posibles, pondré cada uno de los ejemplos de manera inicial, como se hacían antes (versión 5.0 de C#) y como lo podremos hacer ahora (versión 6.0 de C#) para poder ilustrarnos con las diferencias.