首页 > 解决方案 > C# 与方法参数的逆变

问题描述

我正在尝试解决一些简单的学习任务,其中包括用 4 种方法编写一些简单语言的解释器 - Set、Sum、Print、Remove;前 2 个方法有 2 个参数 - 变量名称和 int 值设置为变量或求和为其当前值,最后 2 个方法只有一个参数 - 变量名称

我正在编写的方法采用 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

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

标签: c#actioncontravariance

解决方案


推荐阅读