相关疑难解决方法(0)

#if DEBUG vs.条件("DEBUG")

在大型项目中使用哪个更好,为什么更好:

#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)

c# debugging preprocessor debug-symbols

416
推荐指数
6
解决办法
28万
查看次数

如何在C#中为类名设置别名,而不必为每个使用该类的文件添加一行代码?

我想为类名创建一个别名.以下语法将是完美的:

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# class-design

71
推荐指数
7
解决办法
7万
查看次数

C# 条件等价于 !DEBUG

什么是 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)

c# conditional debug-symbols

5
推荐指数
1
解决办法
2172
查看次数

当没有定义DEBUG符号时,等效于Debug.Assert()?

我正在寻找将测试表达式的语法,如果结果为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)

避免在不同的地方有编译说明.

还有其他方法吗?

c# assert

2
推荐指数
1
解决办法
114
查看次数