我在我的 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() 方法中三个调用的顺序并不重要。例如,递减可能发生在递增之前。结果是,当运行应该生成错误的代码时,错误处理代码会触发,这是我不想要的。
我怎样才能防止这种情况?