我有一些枚举声明,因为我不明原因造成了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,为什么?
基本上我只想根据英雄类给某些属性赋值..
答案 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
}
}