我在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()方法中三个调用的顺序并不重要。例如,递减可以在递增之前发生。结果是,当运行应该生成错误的代码时,错误处理代码会触发,这是我不想要的。
我该如何防止这种情况?
答案 0 :(得分:0)
在IncrementIgnoreCount
,DecrementIgnoreCount
和HandleError
功能中为您的代码添加跟踪或日志。
这将有助于您查看真实的通话订单。