2009-07-30 16 views
4

Ist es möglich, einen dynamischen Operator in C# zu haben?C# dynamischer Operator

+2

Versuchen für eine C# Eval Implementierung googeln, wie das klingt wie das, was Sie suchen. –

+0

Verwandte Frage: http://stackoverflow.com/questions/174664/operators-as-strings –

Antwort

16

Sie können keine dynamischen Operatoren erstellen, aber Sie können einen Operator in einen Delegaten einschließen. Sie können lambdas verwenden, um die Syntax zu vereinfachen.

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

Obwohl es nicht definitiv ist - die zukünftige Richtung für C# ist, den Compiler als Dienst zu implementieren. An einem bestimmten Punkt ist es möglicherweise möglich, Code zu schreiben, der einen Ausdruck dynamisch auswertet.

-1

C# 4.0 wird ein dynamisches Schlüsselwort für dynamische Typisierung haben.

+0

Begrenzt auf v2 atm –

+0

Warum wollen Sie einen dynamischen Operator? Vielleicht sollten Sie versuchen, Generika oder Downcast zu verwenden, um –

+0

Interoperabilität mit dem dynamischen Framework und Sprachen hauptsächlich. – Dykam

1

Sie könnten etwas wie Flee hilfreich finden. Es gibt andere, aber ihre Namen entkommen mir gerade jetzt.

3

Huckepack auf LBushkin Antwort:

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