C#与方法参数的矛盾

时间:2020-02-11 12:16:41

标签: c# action contravariance

我正在尝试解决一些简单的学习任务,其中包括使用4种方法(设置,总和,打印,删除;前2个方法有2个参数-变量名和设置为变量的int值或求和为其当前值,后2个方法只有1个参数-变量名

我正在编写的方法采用string,例如“ set a 3”或“ print a”,并且应作为该字符串的解释器(执行适当的操作)。 显而易见的方法是使用switch构造(按第一个单词切换),但是我已经读到,最好使用Dictionary而不是switch,所以我已经定义了

Dictionary<string, Action<ActionArg>> methods

,其中ActionArg被定义为具有2个继承类型的超类型:

abstract class ActionArg {} 
class ActionArgVal : ActionArg { public string Val {get; set; } }
class ActionArgValVar : ActionArgVal { public int Var {get; set; } }

,并定义了4种方法,例如,

void Set(ActionArgValVar) { ... }

但是当我尝试编写methods = new Dictionary<string, Action<ActionArg>> { {"set", Set}, ... }时,会发生一个错误,因为Action<ActionArgValVar>的矛盾性导致无法将Action<ActionArg>分配给Action。 / p>

有没有办法使用Dictionary来解决这个问题,或者像这样的任务最好通过简单的switch构造来解决?

0 个答案:

没有答案