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

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

概述我有这两个主要课程.首先是FSMSystem类: public class FSMSystem<T> : MonoBehaviour where T : FSMSystem<T>{ private T m_Owner = default(T); protected FSMState<T> currentState; private Dictionary<int, FS 我有这两个主要课程.首先是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等方法.

总结

以上是内存溢出为你收集整理的c# – 类型`T’必须是可转换的,以便在泛型类型或方法中将其用作参数`T’全部内容,希望文章能够帮你解决c# – 类型`T’必须是可转换的,以便在泛型类型或方法中将其用作参数`T’所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1249941.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存