Ya hace varios años que se pusieron de moda las Web APIs, pero hasta la fecha, los servicios por medio del protocolo SOAP siguen siendo de lo más usado. En .NET tenemos los Web Services (ASMX) y WCF, que permiten crear servicios bajo este protocolo. La facilidad de crearlos y consumirlos en este framework es parte de lo que los hace tan populares hasta hoy en día.
Sigue leyendo «.NET SoapClient: simple cliente para servicios SOAP»
Categoría: C#
C#: Métodos con parámetros opcionales
En ciertos casos, podemos encontrarnos en la situación de tener un método con cierta cantidad de parámetros (pocos o muchos), de los cuales algunos los usamos en ciertos casos, y otros no.
C#. Convertir números a letra
Basado en una función que encontré en Internet (no recuerdo dónde :(), creé esta función de extensión para el tipo de dato int
, para convertir de número a letra.
Cerrar sesión en ASP.NET (HTTPSessionState)
Ayer nos topamos en el trabajo con este detalle, y aunque al principio batallamos para encontrar solución, en realidad es algo sencillo.
ASP.NET utiliza un objeto HttpSessionState
para permitirnos guardar variables en una sesión, es decir, mientras el usuario está en nuestro sitio Web sin cerrar el navegador.
Optimizar la sentencia for
Algo que encontré una vez en Internet hace poco (no recuerdo bien en dónde) que me llamó mucho la atención es cómo podemos optimizar una sentencia for
.
Inserciones condicionales
Cuando hacemos una inserción como ésta:
public void EsStoredProcedure(ref SqlCommand comando, bool esSP) { if (esSP) comando.CommandType = CommandType.StoredProcedure; else comando.CommandType = CommandType.Text; }
Estamos haciendo mucho rollo para darle valor a una sola variable. Esto no solo afecta estéticamente a nuestro programa. También ocupa algunos bits de más si podemos resumirlo a una sola línea.
En C#, una inserción condicional es cuando «incluimos» el if dentro de la inserción, de esta manera:
public void EsStoredProcedure(ref SqlCommand comando, bool esSP) { comando.CommandType = (esSP ? CommandType.StoredProcedure : CommandType.Text); }
La inserción condicional se divide en tres partes: la condición (if), el resultado si la condición es positiva (true) y el resultado si la condición es negativa (false). La condición es seguida por un signo de interrogación, y los dos resultados se dividen con un signo de dos puntos.
En VB.NET, existe una función llamada Iif, que hace más o menos lo mismo:
Public Sub EsStoredProcedure(ByRef comando As SqlCommand, ByVal esSP As Boolean) comando.CommandType = Iif(esSP, CommandType.StoredProcedure, CommandType.Text) End Sub
La diferencia es que C# evalúa solamente la condición y la inserción que se va a realizar, mientras VB evalúa las tres expresiones en la función Iif. Esto es un punto negativo, pues nos podemos topar con esta situación:
Public Function ObtenerDato(ByRef tabla As DataTable) As String Return Iif (tabla.Rows.Count > 0, tabla.Rows(0)("columna").ToString(), "") End Function
En VB se evalúan las tres expresiones durante la ejecución. Suponiendo que la tabla no tiene ninguna fila, la aplicación generará un error de tipo NullReferenceException, pues la segunda parte de la función llama a una columna dentro de una fila inexistente.
Por cosas como ésta, prefiero C# sobre VB.NET.
C# – Propiedades
En .NET podemos crear y utilizar un elemento especial, denominado Propiedad, que aunque a simple vista parece ser una variable cualquiera, puede esconder una funcionalidad tan compleja como lo necesitemos.
C#: Valor nulo para tipos de datos comunes
Es extraño incorrecto ridículo estúpido curioso que a los datos de tipo int
, string,
char
, byte
, float
, double
, etc. no se les pueda asignar un valor nulo. Esto no sería de importancia para nosotros si no fuera porque en C#, siempre debemos darle un valor a toda variable al ser inicializada, ya sea utilizando el constructor de su clase o, como solemos hacer para solventar este problema, inicializarla con valor nulo. ¿Pero qué hacemos si la clase no nos permite asignar este valor? Muy fácilmente nos toparemos con este problema mientras programamos, pero existe una solución.