
Cargar dll, ver sus propiedades y ejecutar sus métodos es realmente sencillo en .NET gracias System.Reflection, en este namespace incluso encontraremos System.Reflection.Emit que nos permitirá generar código IL en tiempo de ejecución.
Para ejecutar un método de una librerÃa que carguemos en tiempo de ejecución seria algo asÃ:
public static object Run() { Assembly As = Assembly.LoadFrom("MyLibrary.dll"); Type tipo = As.GetType("MyNameSpace.Class"); if (tipo == null) throw new Exception("No existe la clase en la Libreria"); MethodInfo method = tipo.GetMethod("MyMethod"); if (method == null) throw new Exception("No existe el metodo en la clase"); if (method.IsStatic) return method.Invoke(null, new object[] {"Param1","Param2"}); else return method.Invoke( Activator.CreateInstance (tipo), new object[] { "Param1", "Param2" }); }
En este ejemplo tanto los parámetros como los resultados son objects, esto puede crear algún problema si le pasamos al método un tipo de parámetro que no espera, o si nos devuelve un tipo que nosotros no esperamos.
La solución esta en los Interfaces, si al crear las dll que tenemos pensado usar con Reflection hacemos que las clases implemente un interface podremos ejecutar los métodos con parámetros y resultados tipados:
public interface IMyInterface { DateTime MyMethod(string par1, string par2); } public static DateTime Run() { Assembly As = Assembly.LoadFrom("MyLibrary.dll"); Type tipo = As.GetType("MyNameSpace.Class"); if (tipo == null) throw new Exception("No existe la clase en la Libreria"); if (tipo.GetInterface("IMyInterface") == null) throw new Exception("La clase debe implementar IMyInterface"); IMyInterface i = (IMyInterface)Activator.CreateInstance(tipo); return i.MyMethod("Par1", "Par2"); }
Second Life .Net Developers User Group
Parece ser que ya existe una comunidad de desarrolladores de .NET en second live, el Second Life .Net Developers User Group
Se definen como una grupo de profesionales que quieren intercambiar ideas, información, proyectos etc … y se reúnen cada Sábado.
Aquà dejo una "foto" de la ultima reunión.
Para mas información ir a la web o contactar con:
![]() |
Tori Lukas Born: |
Podemos usar predicados para realizar algunas operaciones de búsqueda sobre las listas genéricas, eso hará que nuestro código sea mucho mas legible y elegante.
Un predicado es un método que comprobara si el objeto que le pasamos cumple con la condición.
Los métodos que podemos usar con predicados son:
Find, FindLast, FindAll, TrueForAll, RemoveAll (Podeis ver lo que hace cada uno en la ayuda de MSDN ya que el funcionamiento del predicado es igual para todos)
Pongo un ejemplo con el FindAll, que será el que mas usemos, y sirve para buscar todos los elementos de la lista que cumplen el criterio, en este caso separamos letras y números.
static void Main(string[] args) { string s = "ABCDEFGHIJKLMÑOPQRSTUVWXYZ1234567890"; List<char> list = new List<char>(); list.AddRange(s.ToCharArray()); List<char> NumberList = list.FindAll(IsNumber); List<char> LetterList = list.FindAll(IsLetter); } public static bool IsNumber(char c) { return Char.IsNumber(c); } public static bool IsLetter(char c) { return !Char.IsNumber(c); }
El tema de los predicados y las listas genéricas da mucho juego vale la pena pegarle un vistazo …
Activar compresión en IIS es relativamente sencillo, y extremadamente fácil en Apache. Una vez hecho, si queremos comprobar que todo ha ido bien y que beneficio obtenemos con el cambio podemos utilizar un servicio que nos ofrece port80 software.
Ejemplo:

Aprovechando el ejemplo del post de Listas y Predicados pondré un ejemplo de métodos anónimos.
Los métodos anónimos son una novedad de C# 2.0 y son la manera de pasar un bloque de código como parámetro.
Pongo el mismo ejemplo de buscar en una Lista letras y números, la búsqueda de números con un método con nombre y la de letras con un método anónimo:
static void Main(string[] args) { string s = "ABCDEFGHIJKLMÑOPQRSTUVWXYZ1234567890"; List<char> list = new List<char>(); list.AddRange(s.ToCharArray()); List<char> NumberList = list.FindAll(IsNumber); List<char> LetterList = list.FindAll( delegate(char c) { return !Char.IsNumber(c); }); } public static bool IsNumber(char c) { return Char.IsNumber(c); }
Otro ejemplo puede ser el pasarle al evento de un control el código directamente
private void Form1_Load(object sender, EventArgs e) { this.button1.Click += delegate { this.Close(); }; }
Hay muchas posibilidades, pero hay que ir con cuidado ya que creo que hace el código mas difÃcil de leer.
¿Cual es la connection string de … ?
Con este sitio ya no volveremos a tener que buscar en internet la connection string adecuada.
El sitio ya es antiguo, pero me acorde de el el otro dÃa buscando la conection string para Oracle Client sin usar el oranames.
Si tienes la necesidad de eliminar elementos de una colección que te estas recorriendo con un foreach y te encuentras con el error "Colección modificada; puede que no se ejecute la operación de enumeración." puedes usar este truquillo.
private void CleanCodigos(ref ICollection<string> Codigos, ICollection<string> CodigosEliminar) { foreach (string Codigo in new ArrayList(Codigos)) { if (CodigosEliminar.Contains(Codigo)) Codigos.Remove(Codigo); } }
La idea es hacer una copia de la colección en un ArrayList que queda referenciada a la colección original y se recorre una y elimina de la otra
Explicación visual de SQL Joins
Un artÃculo en Coding Horror que me ha gustado mucho que explica de forma intuitiva y gráfica los joins en SQL.
PLINQ (PFX) o LINQ en paralelo.
Microsoft esta trabajando para sacar a la luz PLINQ también conocido como Parallel LINQ. TecnologÃa que añade a LINQ mediante extension methods la potencia de la ejecución multihilo de forma transparente.
Más información:








