c# - 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
构造来解决?
解决方案
推荐阅读
- delphi - 有没有办法从通用约束类型获取 GUID?
- swift - TabBar 故事板如何连接?
- excel - 将excel中的动态范围导出到powerpoint
- javascript - 在 Knockout 样式绑定中使用 CSS3 变量
- c++ - 如何在 c++ operator() 中专门调用模板?
- android - 如何在 Android Gradle 构建中使用 pom 文件?
- javascript - Bootstrap 折叠按钮和可折叠列表组未折叠
- python - 没有测试运行,请检查配置设置
- visual-studio - 为色彩空间转换设置 IMTransform 视频处理器
- sql - 基于同一张表的两列过滤