我只是在研究一个状态机类型,想尝试一下Activator.CreateInstance方法,看看它是什么样子的,但我遇到了一个问题:我似乎无法像我想象中那样使用“where”子句。如果我很傻,每个人都会嘲笑我,我先提前道歉。我有两个小类。
public class TransitionContainer<TTransition, TStateTo> :
ITransitionContainer<TTransition, TStateTo>
where TTransition : ITransition
where TStateTo : IState
{
public TransitionContainer()
{
StateTo = typeof(TStateTo);
Transition = Activator.CreateInstance<TTransition>();
}
public Type StateTo { get; private set; }
public TTransition Transition { get; private set; }
}
除此之外
public class StateContainer<T> : IStateContainer<T> where T : IState
{
private Dictionary<Type, TransitionContainer<ITransition, IState>> _transitions =
new Dictionary<Type, TransitionContainer<ITransition, IState>>();
public StateContainer()
{
State = Activator.CreateInstance<T>();
}
public T State { get; private set; }
public int TransitionCount
{
get { return _transitions.Count; }
}
public void AddTransition<TTransition, TStateTo>() where TTransition : ITransition, new()
where TStateTo : IState, new()
{
var transitionContainer= new TransitionContainer<TTransition, TStateTo>();
_transitions.Add(typeof(TTransition), transitionContainer);
}
在代码行
_transitions.Add(typeof(TTransition), transitionContainer);
中,我收到了一个错误信息:无法将 TransitionContainer<TTransition,TStateTo> 表达式转换为类型 TransitionContainer<ITransition,IState>
。如果我更改泛型参数为:
var transitionContainer= new TransitionContainer<ITransition, IState>();
它可以正常地工作,但我想使用新的继承类型(new()),以确保我可以实例化它们。
如果我做了什么极其错误的事情,请再次原谅我。我只是遇到了困境,我的搜索没有得到很好的指引。我没有包含任何其他接口或类,因为它们似乎不是问题的一部分,但如果需要,我可以附上它们. 谢谢您的帮助!
where
和out
添加到interface ITransitionContainer
的定义中,并将class
添加到AddTransition
方法中吗?我尝试过了,但仍然不起作用。 - Andrew_transitions.Add(typeof(TTransition), transitionContainer);
运行时,我会收到一个System.ArrayTypeMismatchException:无法将源数组类型分配给目标数组类型。
我会看看我能做什么。 - Travis Scott