C# 添加独立的值类型

C# 添加独立的值类型,c#,object,reflection,C#,Object,Reflection,我有一种可编写脚本的语言,可以在其中定义不同的脚本元素。 现在我想包括对数学运算符的支持,而不需要显式类型 我认为代码更好地解释了这一点: var ret = a + b; 其中a和b是对象,但在运行时它们都是相同类型的(例如int、double等) 在不指定每种类型的情况下,如何解决此问题 a和b是object类型的csharp变量,因此我不能添加它们,但其中有一个可以添加的类型,但我只知道运行时的类型 运行时绑定的完美案例: dynamic ret = (dynamic)a + (dyna

我有一种可编写脚本的语言,可以在其中定义不同的脚本元素。 现在我想包括对数学运算符的支持,而不需要显式类型

我认为代码更好地解释了这一点:

var ret = a + b;
其中a和b是对象,但在运行时它们都是相同类型的(例如int、double等)

在不指定每种类型的情况下,如何解决此问题

a和b是object类型的csharp变量,因此我不能添加它们,但其中有一个可以添加的类型,但我只知道运行时的类型

运行时绑定的完美案例:

dynamic ret = (dynamic)a + (dynamic)b;
这与
a
b
使用精确的运行时类型静态键入的语义大致相同。

我现在通过

Expression.Add(...

我想这会管用的。我还通过构建属性get表达式来获得“a”的值…

你的问题真的不清楚。这是用C#还是用你自己的语言?你是想让这个C#有效,还是要实现一个脚本引擎来执行这个?我在你的代码中看不到显式类型,只要对象a实现+并将采用类型b的参数,Bob是你母亲的妹妹的兄弟进入
操作符
关键字我将拥有有效的csharp代码!a和b是对象类型的csharp变量,所以我不能添加它们,但其中有一个可以添加的类型,但我只知道运行时的类型……为什么你认为可以使它比动态更快?不会的,DLR经过了大量优化。静态语言当然更快,但当你想创建一种不使用类型的脚本语言时,这艘船就开航了。他会想手动使用反射并缓存它,否则速度会非常慢。@Some1Pr0 DLR已经这样做了。它生成针对常见类型的专用运行时代码。性能问题不是问题的一部分。我看不到任何证据表明这项行动是他代码中的一个热点。事实并非如此。尝试将动态代码与缓存的反射代码进行基准测试,您会对结果感到惊讶。是的,您可以更快。DLR仍然比反射快得多。还不错。如果根据我的测量只有一个运行时案例,那么静态性能的差异系数为3。我说的是:对于每种类型,您只需要第一次使用反射,这意味着它基本上与在字典中找到一个方法并正常调用它一样快,这几乎与正常的方法调用一样快。表达式树是静态类型的。它们不是为动态绑定场景而设计的。他们只会拒绝两个
对象作为输入。是的,但我知道运行时的类型,我可以使用表达式(Constatnt,Type)来判断类型。。。我可以缓存表达式,因为类型始终保持不变!我的参数表达式的类型已经正确。。。