0

我正在编写一台小型虚拟计算机,并配有自己的指令集。给我带来问题的是算术指令(add、mul、div 等),因为我希望它们能够处理各种不同大小的操作数(8、16、32 和 64 位有符号和无符号)整数,以及 32 位和 64 位浮点数 - 本质上,每个数字 C# 基本类型)。操作数的类型直到运行时才知道。

不过,我不确定在 C# 中有什么优雅的方法可以做到这一点。操作数通常存在于我正在编写的特殊堆栈类型上,将由 Pop 方法返回,但据我所知,方法只能有一种返回类型。

同样,在执行算术指令的方法中,具有不同的操作数大小意味着我需要编写一个非常不守规矩的 switch 块。

我见过这个dynamic关键字,但我听说它更适合与 IronRuby/IronPython 互操作。

有什么方法可以优雅地解决这个问题,而不需要切换块或将所有东西装箱object

4

1 回答 1

1

Is this the kind of thing you are looking for ?

public static T Add<T>(T a, T b) where T: struct
{
    dynamic first = a;
    dynamic second = b;
    return first + second;
}

You can create a generic method like this for each mathematical operator you need.

于 2013-09-14T14:55:03.647 回答