0

我在我的 C# 代码中看到一个奇怪的问题。我有这样的事情:

public static class ErrorHandler {
  public static int ErrorIgnoreCount = 0;
  public static void IncrementIgnoreCount() {
    ErrorIgnoreCount++;
  }
  public static void DecrementIgnoreCount() {
    ErrorIgnoreCount--;
  }
  public static void DoHandleError() {
    // actual error handling code here
  }
  public static void HandleError() { 
    if (ErrorIgnoreCount == 0) {
      DoHandleError();
    }
  }
}

public class SomeClass {

  public void DoSomething() {
    ErrorHandler.IncrementIgnoreCount();
    CodeThatIsSupposedToGenerateErrors(); // some method; not shown
    ErrorHandler.DecrementIgnoreCount();
  }
}

问题是编译器经常认为 DoSomething() 方法中三个调用的顺序并不重要。例如,递减可能发生在递增之前。结果是,当运行应该生成错误的代码时,错误处理代码会触发,这是我不想要的。

我怎样才能防止这种情况?

4

1 回答 1

0

IncrementIgnoreCount在,DecrementIgnoreCountHandleError函数中添加跟踪或日志到您的代码。

这将帮助您查看真实的调用顺序。

于 2017-03-09T12:15:49.890 回答