【发布时间】:2011-01-09 22:51:57
【问题描述】:
我设置了一个简单的程序来测试 get 访问器中的代码如何执行(因为我在另一个项目中遇到了一些问题),并发现了一些很奇怪的东西:
class Program {
static void Main(string[] args) {
var test = new TestClass();
var testBool = test.TestBool;
}
}
public class TestClass {
private bool _testBool = true;
public bool TestBool {
get {
if (_testBool) {
Console.WriteLine("true!");
} else {
Console.WriteLine("false! WTF!");
}
_testBool = false;
return _testBool;
}
}
}
我希望输出是
真的!
但我得到的是
真的!
假的!卧槽!
这里到底发生了什么?
【问题讨论】:
-
您是否在调试器中运行程序?调试器会在你背后调用属性获取器。
-
为什么删除后又问这个问题?解决方案可能是相同的“IDE 执行访问器,因为它希望它没有副作用”的事情。
-
从手表中删除
test.TestBool或在不调试的情况下运行应用程序。 -
(与重复合并;请不要重复发布 - 特别是因为您删除的帖子上已经有两个答案)
-
@Marc Gravell:如果他没有在我提交答案之前删除他的帖子,他会是三个。 :(