2014-07-21 74 views
1

在c#中有一種方法可以避免計算昂貴的參數。日誌聲明避免計算參數

DebugLog(object.getName()); 

如果我想避免調用的getName(說其昂貴的)我要做

#if DEBUG 
DebugLog(object.getName()); 
#endif 

在其他語言中我可以做一個日誌宏是一個沒有 - 如果日誌級別是某種方式,只是做

DebugLog(anything i want as it just is skipped) 

有沒有其他的方法,然後有醜陋的定義一個圍繞每一個日誌?

+0

您是否可以訪問'DebugLog'方法?用'[Conditional(「DEBUG」)]'屬性標記它。 –

+0

重複的http://stackoverflow.com/a/2248025/607701。正確的答案是使用lambda表達式。 –

回答

4

可以在條件屬性的幫助下完成。例如。如果您有[ConditionalAttribute("DEBUG")],DEBUG未定義,則會跳過整個函數調用,包括評估參數。

這是,例如,如何Debug.Assert的作品。

例如,該代碼

static void Main() 
{ 
    Log(F()); 
} 

[ConditionalAttribute("DEBUG")] 
static void Log(string s) 
{ 
    Console.WriteLine(s); 
} 

static string F() 
{ 
    Console.WriteLine("foo"); 
    return "bar"; 
} 

輸出

foo 
bar 
在調試配置

,其中DEBUG被限定,並且在釋放配置。

+0

+1。如果你提供了一個例子,你的答案會更有幫助。 –

+0

@JimMischel完成:)。 – AlexD

+0

在這裏看到正確的答案:http://stackoverflow.com/a/2248025/607701 –