【问题标题】:Uncomment code programmatically以编程方式取消注释代码
【发布时间】:2013-07-23 03:06:24
【问题描述】:

如何以编程方式注释掉一些评论? 想想这样的事情:-

void releaseA()
{
   //ToDo:
}
//string A = "Test";
releaseA();
textbox1.Text = A;

如何实现这一点并实现方法releaseA 注释掉//string A = "Test"; 我搜索了但仍然找不到任何东西。

【问题讨论】:

  • 您希望您的代码能够在运行时修改自己的编译代码?
  • 就像在当前执行的代码中一样?不会发生。代码在文本文件中吗?只需将其读入字符串或其他内容并替换 //
  • 我……什么?我想对于您要实现的目标,您将存储一些布尔标志并检查它以确定您要使用的 A 的值。这是用于多平台编译吗?您可以使用#if directives 来检查编译目标吗?
  • 您的评论实际上是在描述State Pattern。您不是“取消注释/注释代码”,而是切换状态。
  • if user check a checkbox then some comment, comment out and turn into code to do something 您所描述的是代码的条件执行,也称为 if 语句...

标签: c# comments


【解决方案1】:

我认为你真正想做的是:

string a = "";

if (condition)
    a = "Test";

textBox1.Text = a;

所以对于你的复选框和文本框的例子:

string text = "";

if (checkBox.Checked)
    text = inputTextBox.Text;

resultTextBox.Text = text;

【讨论】:

    【解决方案2】:

    如果您想在构建指定文件之前注释代码,您可以使用编译器开关并在 VS 或使用 MSBuild 构建文件时指定编译器开关。

    你可以这样使用:

    #ifdef _DEBUG
    //string A = "Test";
    #else
    string A = "Test";
    #endif
    

    【讨论】:

      【解决方案3】:

      我相信 cmets 会被编译器忽略并且不会驻留在整个 exe 中。因此,鉴于您当前的代码,这在技术上是不可能的。

      此外,一旦将其编译为字节码,您将无法知道所说的代码将在哪一行。

      【讨论】:

        【解决方案4】:

        我不会在 c# 中编写代码,但会在 c 和 Objective C 中编写代码,所以我确信这种方法是可移植的。

        如果我有一个功能,我希望能够在编译时有条件地启用,并可能在运行时禁用它(而不是相反!),我使用以下方法。

        在所有相关文件都会看到(或命令行开关)的全局(前缀)标头中,定义一个强制编译器物理包含该功能的常量代码到可执行文件中。这实际上是一个布尔常量。

        #define acme_support        1
        

        在一个通用头文件中(例如 settings.h)定义一个包装器来告诉运行时 如果该功能可用,则代码。如果它不可用,它是硬编码的。如果可用,则为外部布尔值。

        #if acme_support
        extern bool runtime_acme_support;
        #else
        #define runtime_acme_support 0
        #endif
        

        在与“settings.h”相关的实现文件中(我们称之为“settings.c”):

        #if acme_support
        bool runtime_acme_support = 1;
        #endif
        

        然后在您想要包含该功能代码的整个项目中:

        #if acme_support
        
            if (runtime_acme_support) {
        
                /*  process the acme widgets for the acme store. */
        
            }
        
        #endif
        

        如您所见,#if / #endif 可防止在编译时未包含禁用代码时启用该功能,但如果某些条件需要(例如需要),您仍可以在运行时“禁用”该功能硬件不存在)

        请注意,这是 #if 而不是 #ifdef,因为 #ifdef 仍然是 true,因为“0”仍然是“已定义”,而 #if 是对值“0”/“1”的布尔测试' 分别为假/真。

        【讨论】:

        • 显然要在此示例中禁用 acme 小部件存储支持,您将在代码中的某处使用 runtime_acme_support = 0;
        猜你喜欢
        • 1970-01-01
        • 2011-01-01
        • 2015-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-28
        • 1970-01-01
        相关资源
        最近更新 更多