现在,我有一个具有此签名属性的抽象类:
protected virtual IDictionary<Type, Action<object>> InitializationMap
{
get
{
return null;
}
}
一旦扩展,我就会覆盖它,例如,如下所示:
protected override IDictionary<Type, Action<object>> InitializationMap
{
get
{
return new Dictionary<Type, Action<object>>
{
{ typeof(INewSchoolWizardExtension), o => ((INewSchoolWizardExtension)o).InitializeWizard(this) },
{ typeof(INewSchoolProcessExtension), o => ((INewSchoolProcessExtension)o).Start() }
};
}
}
虽然它有效,但我真的不喜欢类型转换部分,它确实使代码变得臃肿。
我在这里想做的是 - 为类型定义一个初始化映射。可以这么说,一旦稍后解决它们,我就会检查正在解决的类型并调用初始化程序。
我想用泛型来做到这一点,但没有成功。
如何实现行为,以便 Action
始终期望其键的类型?
最佳答案
这会带来一点点开销,但在其他方面还是有用的:
public class MyInitalizationDictionary : Dictionary<Type, Action<object>>
{
public void Add<T>(Action<T> action)
{
this.Add(typeof(T), o => action((T)o)); //said overhead
}
}
示例初始值设定项:
protected override IDictionary<Type, Action<object>> InitializationMap
{
get
{
return new MyInitalizationDictionary
{
(INewSchoolWizardExtension o) => o.InitializeWizard(this),
(INewSchoolWizardExtension o) => o.Start()
};
}
}
关于c# - Action 字典期望其键的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26039265/