JuanCri.com

martes 18 de noviembre, 2008 a las 01:34

Hace algunos meses escribí sobre la notación que podría tener c# para tener lambda simplificado. En ese momento todavía desconocía que C# ya tiene soporte para lambda mucho más simple en su versión 3. Entonces, podemos escribri algo como

using System;

delegate string CrearString ();

public class Test
{
	public static void Main ()
	{
		Escribir (() => DateTime.Now.ToString ());
	}
	
	private static void Escribir (CrearString crear)
	{
		Console.WriteLine (crear ());
	}
}

Esto nos permitiría, en el caso de Log4net, escribir esto:

logger.Debug (() => "Ejecutando función de " + nombreX + " con parámetro " + z);

Lamentablemente, para que esto fuera posible, ILog tendría que soportar los esta sobrecarga. Pero podemos extender ILog, así:

using System;
using log4net;
using log4net.Config;

public delegate string CrearString ();

public static class ILogExtensions
{
	public static void Debug (this ILog log, CrearString crear)
	{
		if (!log.IsDebugEnabled)
			return;
		
		log.Debug (crear ());
	}
	
	public static void Main ()
	{
		BasicConfigurator.Configure();
		ILog log = LogManager.GetLogger (typeof (ILogExtensions));
		log.Debug (() => "Prueba a las " + DateTime.Now);
	}
}

:D

Creative Commons License
Blog JuanCri.com por Juan Cristóbal Olivares licenciado bajo la Creative Commons Attribution 2.0 Chile License.
Mono PostgreSQL Firefox Gratis

© JuanCri.com