这与我前段时间提出的问题有些相同: 如何让一个方法接受两种类型的数据作为参数?
但目前的情况有很多不同.
拿着这个:
public FormResourceSelector(Dictionary<string, Effect> resourceList, string type)
Run Code Online (Sandbox Code Playgroud)
好吧,没问题.现在我试着运行这个:
FormResourceSelector frs = new FormResourceSelector(AreaEffect.EFFECTS, "Area effect");
FormResourceSelector frs2 = new FormResourceSelector(DistanceEffect.EFFECTS, "Distance effect");
Run Code Online (Sandbox Code Playgroud)
AreaEffect和DistanceEffect(自定义类)都派生自Effect.
public class AreaEffect : Effect
{
public static Dictionary<string, AreaEffect> EFFECTS = new Dictionary<string, AreaEffect>();
...
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我在制作新的FormResourceSelector实例时遇到以下错误:
Argument 1: cannot convert from 'System.Collections.Generic.Dictionary<string,SCreator.AreaEffect>' to 'System.Collections.Generic.Dictionary<string,SCreator.Effect>'
Run Code Online (Sandbox Code Playgroud)
在:
new FormResourceSelector(AreaEffect.EFFECTS, "Area effect");
Run Code Online (Sandbox Code Playgroud)
我怀疑dictonary是一个骚扰,但我真的不知道如何解决这个问题.
编辑:最简单的是允许在我给出的第一个代码片段中输入Dictionary和Dictionary作为resourceList.
为什么不让你的班级通用?
public class FormResourceSelector<T>
where T : Effect
{
public FormResourceSelector(Dictionary<string, T> resourceList, string type)
{
}
}
Run Code Online (Sandbox Code Playgroud)