2012-05-17 74 views
8

假设我在C#下面的代码:防止Visual Studio编辑器#ENDIF

void Func() { 
    int i=3; 

    #if DEBUG 
    ... 
    #endif 

    for (int j=0;j<i;j++) { 
     ... 
    } 
} 

如果我使用Edit->Advanced->Format document,它就会被重新格式化为这个(使用我当前的代码格式设置) :

void Func() 
{ 
    int i = 3; 

#if DEBUG 
    ... 
#endif 

    for (int j = 0; j < i; j++) 
    { 
     ... 
    } 
} 

是否有办法防止#if#endif线被移动到最左边?我无法找到这些设置,但我希望有一个注册表设置来控制它的工作原理。

任何建议将不胜感激 - 这种行为让我疯狂,因为我的代码有几百个这样的块,他们不断被VS破坏。

+11

它格式非常好:)#语句不是代码的一部分,所以他们不应该缩进。 –

+3

这是你的偏好。当你有数百个(平均每个功能5-9个)时,这使得阅读代码变得非常困难。几乎不可能找到功能的开始/结束。 – xxbbcc

+5

这是一个建议 - http://msmvps.com/blogs/peterritchie/archive/2011/11/24/if-you-re-using-if-debug-you-re-doing-it-wrong.aspx – hatchet

回答

0

在工具/选项下,深入到文本编辑器/ C#/选项卡。在该设置页面上,将缩进从智能更改为阻止。这将停止预处理器行的缩进,并取消其他功能。我不是高手足够该设置告诉你什么其他格式的东西,你会输球,但是这给一般的想法:我一直在使用被添加的空间这样的#标签 http://www.blackwasp.co.uk/VSTabs.aspx

+0

谢谢,我已经使用块格式化制表符。它仍在发生。 – xxbbcc

+0

@xxbbcc我明白你的意思了。 Block会将其留在您键入的位置,但如果您专门进行了重新格式化,则它们会丢失任何缩进。 – hatchet

+0

是的,不幸的是,我从来没有能够阻止这种情况发生。 – xxbbcc

2

一种风格

void Func() 
{ 
    int i = 3; 

# if DEBUG 
    ... 
# endif 

    for (int j = 0; j < i; j++) 
    { 
     ... 
    } 
} 

..the如果块看起来像它一字排开的代码正确,并重新格式化代码不动的预处理器标签。

+0

@ com3lius:我现在只看到你的建议,谢谢 - 我会试试看。我不确定是否喜欢它,但它仍然看起来比屠宰布局更好。 – xxbbcc