将运算符应用于两个没有“动态”的对象

时间:2013-02-23 18:18:09

标签: c# operators interpreter

背景:我正在为一种简单的语言编写翻译,让用户可以玩耍并享受乐趣。它将作为游戏的mod运行。我不能使用动态的原因是因为游戏在Unity3d中运行,Unity3d运行的Mono版本相当于.net 3.5(没有动态)。

现在提出问题:我将值存储为对象。在评估表达式(比如说,添加)时,我遇到了尝试“对象+对象”的问题。我怎么能这样做?

一种解决方案是在每个对象上执行大量的switchblock,检查它的类型以查看它是否是基本值类型(int,long,double等),如果是,则转换为该类型并添加。如果它不是基本值类型,请在每种类型中查找op_Addition方法,如果存在,请调用它。

这可以很快地为每个运营商做很多代码。我想知道是否有更好的,更少的复制粘贴方式。 (最佳解决方案是某些.net库函数,object Add(object, object),但这是有希望的)

1 个答案:

答案 0 :(得分:1)

您可以为定义所需操作的对象定义接口,然后确保所有存储对象都实现该接口(可能包含简单类型)。