在大型项目中使用哪个更好,为什么更好:
#if DEBUG
public void SetPrivateValue(int value)
{ ... }
#endif
Run Code Online (Sandbox Code Playgroud)
要么
[System.Diagnostics.Conditional("DEBUG")]
public void SetPrivateValue(int value)
{ ... }
Run Code Online (Sandbox Code Playgroud) 我想为类名创建一个别名.以下语法将是完美的:
public class LongClassNameOrOneThatContainsVersionsOrDomainSpecificName
{
...
}
public class MyName = LongClassNameOrOneThatContainsVersionOrDomainSpecificName;
Run Code Online (Sandbox Code Playgroud)
但它不会编译.
注意此示例仅供参考.不要试图通过建议改变整个系统的设计来解决这个特殊问题.此示例的存在或缺乏不会改变原始问题.
一些现有代码依赖于静态类的存在:
public static class ColorScheme
{
...
}
Run Code Online (Sandbox Code Playgroud)
此配色方案是Outlook 2003配色方案.我想介绍一个Outlook 2007配色方案,同时保留Outlook 2003配色方案:
public static class Outlook2003ColorScheme
{
...
}
public static class Outlook2007ColorScheme
{
...
}
Run Code Online (Sandbox Code Playgroud)
但我仍然面临这样一个事实,即代码依赖于名为ColorScheme的静态类的存在.我的第一个想法是创建一个ColorScheme类,我将从Outlook2003或Outlook2007下载:
public static class ColorScheme : Outlook2007ColorScheme
{
}
Run Code Online (Sandbox Code Playgroud)
但你不能从静态类下降.
我的下一个想法是创建静态ColorScheme类,但使Outlook2003ColorScheme和Outlook2007ColorScheme类非静态.然后静态ColorScheme类中的静态变量可以指向"true"颜色方案:
public static class ColorScheme
{
private static CustomColorScheme = new Outlook2007ColorScheme();
...
}
private class CustomColorScheme
{
...
}
private class Outlook2008ColorScheme : CustomColorScheme
{
...
} …Run Code Online (Sandbox Code Playgroud) 什么是 C#System.Diagnostics.Conditional等价物#if (!DEBUG)?
如果控制台应用程序没有在调试模式下编译,我想加密它的 app.config 文件的一部分。这是这样实现的:
public static void Main(string[] args)
{
#if (!DEBUG)
ConfigEncryption.EncryptAppSettings();
#endif
//...
}
Run Code Online (Sandbox Code Playgroud)
但不知何故,我更喜欢用条件属性装饰 encrypt 方法:
[Conditional("!DEBUG")]
internal static void EncryptAppSettings()
{
//...
}
Run Code Online (Sandbox Code Playgroud)
然而这让编译器很伤心: The argument to the 'System.Diagnostics.ConditionalAttribute' attribute must be a valid identifier...
否定条件参数的正确语法是什么?
编辑: 感谢@Gusdor,我使用了这个(我更喜欢让 Program.cs 文件没有 if/else 调试逻辑):
#if !DEBUG
#define ENCRYPT_CONFIG
#endif
[Conditional("ENCRYPT_CONFIG")]
internal static void EncryptAppSettings()
{
//...
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找将测试表达式的语法,如果结果为false DEBUG并且缺少符号,则抛出异常.但不是在那里.
我知道我可以用:
#if !DEBUG
Trace.Assert(condition);
#endif
Run Code Online (Sandbox Code Playgroud)
而且我知道我可以使用:
#if !DEBUG
SomeGlobal.Production = true;
#endif
Run Code Online (Sandbox Code Playgroud)
所以我可以写:
Trace.Assert(SomeGlobal.Production && condition);
Run Code Online (Sandbox Code Playgroud)
避免在不同的地方有编译说明.
还有其他方法吗?