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