我想构建一个泛型类型,它将在初始化类型T1的实例并在其方法中接受类型T2的实例时接受。
所以,现在我有一个通用的方法,在可接受的类型有一个约定 - 是某种抽象类的孩子,我有这个抽象类型实例的内部集合:
了解使用泛型方法/类型时的类型分配
private readonly IList<Tuple<CommandBase<SocialNetworkUnit, SocialNetworkUnit>, SocialNetworkUnit>> _history;
public bool Invoke<TInitiator, TParameter>(CommandBase<TInitiator, TParameter> command, TParameter parameter)
where TInitiator : SocialNetworkUnit
where TParameter : SocialNetworkUnit
{
var success = command.Run(parameter);
this._history.Add(new Tuple<CommandBase<SocialNetworkUnit, SocialNetworkUnit>, SocialNetworkUnit>(command, parameter));
}
但是我有一个编译错误说TInitiator和TParameter参数(传统给SocialNetworkUnit)不能用于收集。
Argument 1: cannot convert from 'CommandUnits.CommandBase<TInitiator,TParameter>' to 'CommandUnits.CommandBase<Command.SNUnit.SocialNetworkUnit,Command.SNUnit.SocialNetworkUnit>'
你能告诉我我的错误吗?
感谢
这只会使它在运行时失败。 (或者简单地说它总是'空',因为你错误地使用了'as'。) – Servy 2015-02-23 21:42:59