gpt4 book ai didi

c# - 类型 'T' 必须可转换才能将其用作泛型类型或方法中的参数 'T'

转载 作者:太空狗 更新时间:2023-10-29 21:18:06 26 4
gpt4 key购买 nike

我有这两个主要类(class)。首先是 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>'

谁能告诉我如何解决这个问题?我看到许多其他与此类似的帖子,但我没有看到它们之间的关系。

最佳答案

TFSMState也必须约束,否则不能用作TFSMSystem - 对其施加了约束(T : FSMSystem<T>)。

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

关于c# - 类型 'T' 必须可转换才能将其用作泛型类型或方法中的参数 'T',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16685825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com