代码根据调试打印不同的答案。我错了什么?
class Program
{
static void Main(string[] args)
{
Feld feld = new Feld();
feld.Setze = 5;
Console.WriteLine(feld.Besetzt);
Console.Read();
}
}
public class Feld
{
public int figur;
public bool Besetzt { get => (figur != 0) ? true : false; }
public int Setze { set => figur = value; }
public int Nehmen { get { int cur = figur; figur = 0; return cur; } }
}
如果我删除最后一个属性,但为什么?
答案 0 :(得分:4)
要扩展现有的评论和答案:您的Nehmen
属性有令人讨厌的副作用:
public int Nehmen { get { int cur = figur; figur = 0; return cur; } }
每次值读时,重置本身为零。这是一个非常糟糕的主意 - 属性get
访问者不会产生意外的副作用。工具的大部分期望读取Nehmen
到不能,IDE /调试器通常会尝试通过查询属性来帮助您理解数据告诉你。
这意味着当调试器试图帮助时,它实际上是重置值。
所以:让Nehmen
成为方法:
public int Nehmen()
{
int cur = figur;
figur = 0;
return cur;
}
系统期望方法有副作用,因此不会调用它们来“帮助”你。
属性get
访问器的唯一有效副作用是调用延迟加载/初始化副作用。
答案 1 :(得分:2)
您必须在Visual Studio的监视窗口中拥有变量Nehmen
...或者尝试以其他方式访问它