【问题标题】:Any way of making the C# compiler check more at compile time?有什么方法可以让 C# 编译器在编译时检查更多?
【发布时间】: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 处理器指令。我希望以上内容以某种方式产生警告。有什么方法可以稍微延长编译时间检查的琐碎序列,或者自定义扩展是唯一的方法吗?


说明:

  1. 我要求提供不使用预处理器的上述替代方案。以上是我想要实现的概念示例。
  2. 我希望编译器发出类似于示例的警告。该示例不起作用。它只是用作插图。
  3. 改写:是否有任何替代方法可以编写自定义分析器来实现示例中的行为,而不使用任何预处理器指令? #warning 只是说明我想要发生的事情。

【问题讨论】:

标签: c# compiler-warnings


【解决方案1】:

不,即使技术上可行,我也怀疑它是否是可取的。可行且正确的情况很少;它会发出错误警告或在应该发出警告时未能发出警告的情况的数量将使任何此类实用程序相形见绌,因此:它的危害大于有用。在一般情况下:即使在同一方法的连续行之间,对象状态也不是很容易预测,因为一般存在不相关的副作用、并发性、反射、不安全的访问以及广泛的其他需要解决的问题 - 包括“停机问题”。

这种情况只能在运行时有效且可靠地检测到,所以:这样做。

【讨论】:

    【解决方案2】:

    除了编写自定义分析器之外别无选择。

    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多