2010-08-25 50 views
0

爲什麼下面的代碼不能編譯(snippet)?C##if/#ifdef語法不能編譯,爲什麼?

public enum ApplicationType : int 
    { 
    CONSOLE = 1, 
    WINDOWS_FORMS = 2, 
    ASP_NET = 3, 
    WINDOWS_SERVICE = 4, 
    MUTE = 5 
    } 

     //#if(false) 
     //#if (DEBUG && !VC_V7) 
#if(m_iApplicationType != ApplicationType.ASP_NET ) 
     public class HttpContext 
    { 
    public class Current 
    { 
    public class Response 
    { 
    public static void Write(ref string str) 
    { 
     Console.WriteLine(str); 
    } 
    } 
    } 
    } 
#endif 
+0

錯誤訊息和細節? – 2010-08-25 20:00:27

回答

6

你得到了什麼錯誤?

在任何情況下,(m_iApplicationType == ApplicationType.ASP_NET )都不是編譯時間常量。

+0

但它適用於VB.NET – 2010-08-25 16:36:15

+0

@Quandary,C#不是VB.NET。至少就http://msdn.microsoft.com/en-us/library/tx6yas69%28v=VS.90%29.aspx而言,它沒有,也沒有一個我剛剛嘗試過的工作示例。 – Rob 2010-08-26 15:04:28

4

您將#if與成員變量一起使用是無效的。它僅適用於您與#define指令創建,像這樣的符號操作:

#define ASP_NET 

#if(ASP_NET) 
// put your conditional compilation code here 
#endif 

#if(CONSOLE) 
// your console-related code goes here 
#endif 

在這種情況下,因爲CONSOLE沒有定義只有#if(ASP_NET)塊中的代碼將被編譯。

+0

也可以在編譯器命令行(包括通過MSBuild腳本或VS Project設置)上設置預編譯器符號(它們不會獲取值,更不用說值變化了,因此不是真正的變量)。 – Richard 2010-08-25 16:08:48