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)
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)
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.
You might find something like Flee helpful. There are others, but their names escape me right now.
Related question: http://stackoverflow.com/questions/174664/operators-as-strings
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" );
}