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

我有这两个主要课程.首先是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等方法.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...