加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 类型`T’必须是可转换的,以便在泛型类型或方法中将其用作

发布时间:2020-12-15 08:31:23 所属栏目:百科 来源:网络整理
导读:我有这两个主要课程.首先是FSMSystem类: public class FSMSystemT : MonoBehaviour where T : FSMSystemT{ private T m_Owner = default(T); protected FSMStateT currentState; private Dictionaryint,FSMStateT m_states; public FSMSystem(T owner) { m_
我有这两个主要课程.首先是FSMSystem类:
public class FSMSystem<T> : MonoBehaviour where T : FSMSystem<T>
{
    private T m_Owner = default(T);

    protected FSMState<T> currentState;

    private Dictionary<int,FSMState<T>> m_states;

    public FSMSystem(T owner)
    {
        m_Owner = GameObject.FindObjectOfType(typeof(T)) as T; //owner;
        m_states = new Dictionary<int,FSMState<T>>();
    }

    protected void AddState( FSMState<T> state )
    {
        m_states.Add( state.GetStateID(),state );
    }
}

第二节,FSMState:

public abstract class FSMState<T>
{   
    public abstract int GetStateID();

    public abstract void OnEnter (FSMSystem<T> fsm,FSMState<T> prevState);
    public abstract void OnUpdate (FSMSystem<T> fsm);
    public abstract void OnExit (FSMSystem<T> fsm,FSMState<T> nextState);
}

它会导致以下错误:

error CS0309: The type ‘T‘ must be convertible to ‘FSMSystem<T>‘ in
order to use it as parameter ‘T‘ in the generic type or method
FSMSystem<T>

有人能告诉我如何解决这个问题吗?我看到很多其他类似的帖子,但我没有看到这种关系.

解决方法

FSMState的T也必须受到约束,否则它不能用作FSMSystem的T–它对其有约束(T:FSMSystem< T>).

如果您提供了编译器错误的行号,我怀疑它会指向OnEnter等方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读