在子类中实现抽象Enum属性

时间:2018-05-10 19:16:44

标签: c# unity3d enums enumeration

我有以下基类

public abstract class Character : MonoBehaviour
{
    protected abstract Enum CurrentState
    {
        get;
        set;
    }
}

以及以下子类

public class Player : Character
{
    protected override Enum CurrentState
    {
        get
        {
            return (State)_anim.GetInteger("State");
        }
        set
        {
           _anim.SetInteger("State", Convert.ToInt32(value));
        }
    }

    private enum State
    {
        IDLE = 0,
        WALK = 1,
        JUMP = 2,
        FALL = 3,
        CLIMB = 4,
        LOOKING_DOWN = 5,
        NPC = 6,
        IMPATIENT = 7,
        LOOKING_UP = 8,
        STUCK = 9,
    }

    void FixedUpdate()
    {
        if (CurrentState == State.CLIMB)
        {

        }
    }

}

该行

if (CurrentState == State.CLIMB)

产生以下错误:运营商' =='不能应用于' Enum'的操作数。和' Player.State'

有任何帮助吗?吸气剂工作正常。所以也许我需要在set accessor中进行强制转换?我不太确定......我对此有点新意见......任何帮助都不仅仅是值得赞赏。

3 个答案:

答案 0 :(得分:0)

您正在将EnumState进行比较。哪个是非法的。您返回 CurrentState 的类型应为 。像 -

这样的东西
protected override State CurrentState
{
    get
    {
        return (State)_anim.GetInteger("State");
    }
    set
    {
       _anim.SetInteger("State", Convert.ToInt32(value));
    }
}

答案 1 :(得分:0)

如前一篇文章所述,Enum的非法操作。不要那样做。

<h4>

答案 2 :(得分:0)

试试这个:

if (Convert.ToInt32(CurrentState) == Convert.ToInt32(State.CLIMB))
            { 

            }

由于无法将Enum的比较作为您需要转换它们进行比较的类型。