6

Is it possible to have a dynamic operator in 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)
Sean Bright
  • 118,630
  • 17
  • 138
  • 146
JL.
  • 78,954
  • 126
  • 311
  • 459

3 Answers3

19

You can't create dynamic operators - but you can wrap an operator in a delegate. You can use lambdas to simplify the syntax.

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();

Although it's not definite - the future direction for C# is to implement the compiler as a service. So, at some point, it may be possible to write code that dynamically evaluates an expression.

LBushkin
  • 129,300
  • 32
  • 216
  • 265
4

Piggybacking on LBushkin's response:

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

rp.
  • 17,483
  • 12
  • 63
  • 79
-1

C# 4.0 will have a dynamic keyword for dynamic typing.

Michaël Larouche
  • 837
  • 10
  • 18