在我的类中使用许多枚举时的Stackoverflow异常

时间:2015-06-15 18:35:38

标签: c# enums stack-overflow

我有一些枚举声明,因为我不明原因造成了StackOverflowException。

我有以下内容:

public enum PrimaryAttribute
{
    Strength,
    Agility,
    Intelligence
}

public enum Class
{
    Tank,
    Fighter,
    Sorcerer
}

public class Hero
{
    public PrimaryAttribute PrimaryAttribute { get; private set; }
    public Class Class 
    {
        get
        {
            return Class;
        }
        set
        {
            if (Class == Class.Tank)
            {
                PrimaryAttribute = PrimaryAttribute.Strength;
                IsBlocking = true;
            }
            else if (Class == Class.Fighter)
            {
                PrimaryAttribute = PrimaryAttribute.Agility;
                IsBlocking = false;
                IsDodging = true;
            }
            else if (Class == Class.Sorcerer)
            {
                PrimaryAttribute = PrimaryAttribute.Intelligence;
                IsBlocking = false;
                IsDodging = false;
            }
        }
    }
}

在我的主要方法中,我正在调用此类并为Hero.Class提供值

Hero hero = new Hero();
hero.Class = Class.Fighter;

此时如果我运行它,我得到一个StackOverflowException,为什么?

基本上我只想根据英雄类给某些属性赋值..

1 个答案:

答案 0 :(得分:6)

Enums不会导致堆栈溢出。但这会:

get
{
    return Class;
}

Class的获取者返回Class。这是无限递归。

您可能希望将值存储在支持变量中:

private Class _class;
public Class Class
{
    get
    {
        return _class;
    }
    set
    {
        // your existing logic, but use the variable instead
    }
}