想不起更好的標題禁用的參數評估,隨意改變它的東西更好:)如何在方法
我的應用程序中含有大量的日誌報表,這樣的事情:
var logger = new Logger(/*..get flag from settings if the logger should be active..*/);
// ....
logger.LogActivity(..serialize an object..);
//...
logger.LogActivity(..get another object's expensive overriden ToString method..);
//...
logger.LogActivity(..log something new..);
Logger類:
public class Logger
{
private readonly bool _isActive;
public Logger(bool isActive)
{
_isActive = isActive;
}
public void LogActivity(string activity)
{
if (_isActive)
{
// Save activity to Database.
}
}
}
當我禁用設置記錄器(所以在Logger類的_isActive場是假的),那麼什麼都被保存到數據庫中。但是Logger.LogActivity方法中的所有表達式仍然被評估(例如前面例子中的..serialize對象),這會降低我的應用程序的速度。 我可以使用日誌語句是這樣的:
var logger = new Logger(/*..get flag from settings if the logger should be active..*/);
// ....
if (loggerIsActive) logger.LogActivity(..serialize an object..);
//...
if (loggerIsActive) logger.LogActivity(..get another object's expensive overriden ToString method..);
//...
if (loggerIsActive) logger.LogActivity(..log something new..);
但它會更好只改變LogActivity方法...是否有可能以某種方式改變只LogActivity方法,以便在情況下,當記錄器被禁用, LogActivity調用中的表達式不被評估?好吧 - 如果在C#中可以這樣做,我會感到驚訝,但是有沒有其他方式/模式可以做到這一點?
傳遞一個lambda表達式? – kenny
爲什麼你沒有像IsLoggerActive這樣的方法來檢查記錄器是否激活,然後開始記錄? –