以编程方式取消注释代码
Posted
技术标签:
【中文标题】以编程方式取消注释代码【英文标题】: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 语句...
【参考方案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;
。以上是关于以编程方式取消注释代码的主要内容,如果未能解决你的问题,请参考以下文章
在 Mathematica 7 中取消/注释掉代码的键盘快捷键?