C#动态运算符

时间:2009-07-30 17:05:57

标签: c# dynamic

是否可以在c#中使用动态运算符?

string aString = "5";
int a = 5;
int b = 6;
string op = "<";

//want to do something like dynamically without checking the value of op
if( a op b)

4 个答案:

答案 0 :(得分:17)

您无法创建动态运算符 - 但您可以将运算符包装在委托中。您可以使用lambdas来简化语法。

Func<int,int,int> opPlus = (a,b) => a + b;
Func<int,int,int> opMinus = (a,b) => a - b;
// etc..

// now you can write:
int a = 5, b = 6;
Func<int,int,int> op = opPlus;
if( op(a,b) > 9 )
    DoSomething();

虽然不确定 - 但C#的未来发展方向是将编译器实现为服务。因此,在某些时候,可以编写动态评估表达式的代码。

答案 1 :(得分:3)

对LBushkin的回应进行捎带:

Func<int, int, bool> AGreaterThanB = (a,b) => a > b;
Func<int, int, bool> ALessThanB    = (a,b) => a < b;

Func< int, int, bool> op = AGreaterThanB;

int x = 7;
int y = 6;

if ( op( x, y ) ) 
{
    Console.WriteLine( "X is larger" );
}
else
{
    Console.WriteLine( "Y is larger" );
}

http://msdn.microsoft.com/en-us/library/bb549151.aspx

答案 2 :(得分:1)

您可能会发现类似Flee的内容。还有其他人,但他们的名字现在正在逃避我。

答案 3 :(得分:-1)

C#4.0将有一个动态类型的动态关键字。