【发布时间】:2021-08-15 10:24:47
【问题描述】:
我想让 C# 编译器在编译时进行更多检查。例如:
public class Foo
{
public bool condition;
public void CheckCondition()
{
if(condition) {
#warning SomeCompilerWarning
}
}
}
static void Main()
{
var foo = new Foo();
foo.condition = true;
foo.CheckCondition();
}
这个微不足道的序列应该可以在编译时检测到。我意识到#warning 是一个 pre 处理器指令。我希望以上内容以某种方式产生警告。有什么方法可以稍微延长编译时间检查的琐碎序列,或者自定义扩展是唯一的方法吗?
说明:
- 我要求提供不使用预处理器的上述替代方案。以上是我想要实现的概念示例。
- 我希望编译器发出类似于示例的警告。该示例不起作用。它只是用作插图。
- 改写:是否有任何替代方法可以编写自定义分析器来实现示例中的行为,而不使用任何预处理器指令?
#warning只是说明我想要发生的事情。
【问题讨论】:
-
这不是一个简单的序列,这是一个实例字段,它不是常量。为了对其进行评估,需要对其进行编译和执行。尝试使用
#if指令并将警告包装在里面 -
你是说上面的不能在运行前检查?那不是真的。
-
@gwow12345 因此,如果您不同意您误解了预处理器是什么,并且如果您说为代码分析器编写规则不是您要问的,那么您的问题就不清楚并且您用完了没有任何回应的字符,直到你澄清你的意图,我们才得到它......我认为无论如何,即使我不明白你在问什么......因为你无法生成运行时来自代码的编译器警告,并且仅来自代码分析器,因为除非您在 Microsoft 或任何实施者工作,否则您无法修改编译器...
标签: c# compiler-warnings