如何让一个方法接受两种类型的数据作为参数?

Tgy*_*gys 3 .net c# arguments

这与我前段时间提出的问题有些相同: 如何让一个方法接受两种类型的数据作为参数?

但目前的情况有很多不同.

拿着这个:

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.

Ili*_*a G 8

为什么不让你的班级通用?

public class FormResourceSelector<T>
    where T : Effect
{
    public FormResourceSelector(Dictionary<string, T> resourceList, string type)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)