C# 赋值后的属性值错误-C

C# 赋值后的属性值错误-C,c#,.net,C#,.net,我偶然发现了这个问题,在我的角色类中,我给属性CurrentHp赋值,但该值不正确,并且与右侧不匹配 角色类继承自GameEntity,两个类的代码如下所示: 配子实体 public abstract class GameEntity { public int BaseDmgMin { get; set; } public int BaseDmgMax { get; set; } public virtual int CurrentHp { get; set; }

我偶然发现了这个问题,在我的角色类中,我给属性CurrentHp赋值,但该值不正确,并且与右侧不匹配

角色类继承自GameEntity,两个类的代码如下所示:

配子实体

public abstract class GameEntity
{
    public int BaseDmgMin { get; set; }
    public int BaseDmgMax { get; set; }
    public virtual int CurrentHp { get; set; }
    public int MaxHp { get; set; }

    public bool IsDead()
    {
        if (CurrentHp < 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public abstract int TakeDamage(int damage);
    public abstract int Attack();
}
当我逐步浏览代码时,我看到以下内容:

1:CurrentHp的值为0,但应为25。

2:CurrentHp现在的值为100,不需要执行更多的CurrentHp赋值。

我错过了什么或者我做错了什么?
非常感谢您提供的所有帮助:

您应该创建一个专用字段来存储CurrentHp的实际值并使用它。它是否发生在同一个块中,针对同一个字符?如果是这样,您的数据行是否可能在字符映射过程中发生更改,比如某种异步操作?随机猜测,但我打赌这与您在var interval=intdiffMilli.TotalMinutes/5上的整数除法有关;在里面TimeHealth@Mickael是的,它发生在同一个角色身上。我不会对我所知道的进行任何异步调用。@Scott Chamberlain我认为这并不重要,因为它是get的一部分,而不是集合的一部分
public class Character : GameEntity
{
    public Character(String CharacterName, int Exp, int Gold) : this()
   {
        this.CharacterName = CharacterName;
        this.Exp = Exp;
        this.Gold = Gold;

    }

    public Character(){
        Inventory = new Inventory();
    }

    public Guid CharacterID { get; set; }
    public string CharacterName { get; set; }
    public int Exp { get; set; }
    public int Gold { get; set; }
    public Weapon Weapon { get; set; }
    public Shield Shield { get; set; }
    public Inventory Inventory { get; set; }
    public int Level { get; set; }
    public DateTime LastHealthUpdate { get; set; }
    public bool InFight { get; set; }
    public override int CurrentHp
    {
        get
        {
            if (!InFight)
            {
                var timeHealth = TimeHealth();
                if (timeHealth > 0)
                {
                    LastHealthUpdate = DateTime.Now;
                    base.CurrentHp = (base.CurrentHp + timeHealth) > MaxHp ? MaxHp : base.CurrentHp + timeHealth;
                } 
            }

            return base.CurrentHp;
        }
        set{ base.CurrentHp = value; }
    }

    public void UpdateHealth()
    {
       var a = CurrentHp;
    }

    public override int Attack()
    {
        Random r = new Random();
        int hitDamage = r.Next(BaseDmgMin, BaseDmgMax);
        if (Weapon != null)
            hitDamage += Weapon.Damage;

        return hitDamage;
    }

    public int TimeHealth()
    {
        var diffMilli = DateTime.Now - LastHealthUpdate;
        var intervals = (int)diffMilli.TotalMinutes / 5;
        return intervals;
    }

    public int GoldLoss()
    {
        int gold = Gold;
        Random r = new Random();
        int multiplier = r.Next(30, 50);
        gold = (gold * multiplier) / 100;
        Gold -= gold;

        return gold;
    }

    public int ExpLoss()
    {
        var expLoss = Convert.ToInt32(Exp * 0.9);
        Exp -= expLoss;
        return expLoss;
    }

    public void GoldGain(int gold) {
        this.Gold += gold;
    }

    public void ExpGain(int exp) {
        this.Exp += exp;
    }

    public override int TakeDamage(int damage)
    {
        if (Shield != null)
            damage = (damage - Shield.Armor > 0) ? damage - Shield.Armor : 0;

        CurrentHp = (CurrentHp - damage > 0) ? CurrentHp - damage : 0;
        return damage;
    }


}