C#setter将值更改为0

oka*_*son 0 c#

我在使用C#编写棋盘游戏时遇到了setter的问题.

在这里,我有一个if语句,我得到一个新的随机数,并尝试更新我的播放器p的位置.

if(Console.ReadLine().Equals("Y"))
{
  int roll = dice.roll();
  Console.WriteLine(p.playerName + " rolled: " + roll);
  int newPosition = p.position + roll;
  p.position = newPosition;

  Console.WriteLine("The players position is: " + p.position);
}
Run Code Online (Sandbox Code Playgroud)

这是Player类中位置的setter.

public int position
    {
        get
        {
            return _position;
        }
        set
        {
            Console.WriteLine("Position is: " + position);
            _position = position;
        }
    }
    private int _position;
Run Code Online (Sandbox Code Playgroud)

我的问题是该值似乎在setter中变为零.

OUTPUT:

滚?(Y/N)Y

玩家1滚动:4

位置为:0 //在播放器位置设置器中打印

玩家位置为:0 //从玩家对象获取值时打印

当我发送一个值时,为什么setter中的位置0的值是4?

Pat*_*man 5

你的setter调用get属性,该属性可能会返回当时的实际值0.您需要使用value哪个是传入值:

set
{
    Console.WriteLine("Position is: " + value);
    _position = value;
}
Run Code Online (Sandbox Code Playgroud)

阅读有关MSDN上value关键字的更多信息.