C#设置程序将值更改为0

本文关键字:设置 程序 | 更新日期: 2023-09-27 18:21:26

我在用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);
}

这是Player类中该位置的二传手。

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

我的问题是setter中的值似乎变为零。

输出:

滚?(Y/N)Y

玩家1滚动:4

位置是:0//在玩家位置设置中打印

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

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

C#设置程序将值更改为0

您的setter调用属性的get,它会返回此时的实际值,可能是0。您需要使用value,这是传入值:

set
{
    Console.WriteLine("Position is: " + value);
    _position = value;
}

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

您的setter从不设置值,它只是使用现有的属性值。由于从未设置过该值,因此它是0的默认整数值。

代替

 _position = position;

你应该使用

_position = value;

问题是使用属性position而不是属性参数value。这就是为什么分配0,它是从getter返回的初始值:

public int position
{
    get
    {
        return _position;
    }
    set
    {
        Console.WriteLine("Position is: " + position);
        // _position = position; // <-- NO, that's using the getter so _position
        _position = value;       // <-- Yes, this is the argument
    }
}
private int _position;

您的代码有问题。在集合内,您正在访问位置。但位置是二传手的职责所在。从本质上讲,你得到了当前的位置,并将其设置为新的值。当你得到0时,我的当前位置是0(因为它是int,所以0也可能是默认值,而不是字符串的null)。

设置程序在变量"value"中具有新值,因为它是默认存储的。因此,考虑到这一点,您的代码应该是:

    public int position
    {
        get
        {
            return _position;
        }
        set
        {
            Console.WriteLine("Position is: " + value);
            _position = value;
        }
    }
    private int _position;