Est-il possible d'avoir un opérateur dynamique dans C#?Opérateur dynamique 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)
Est-il possible d'avoir un opérateur dynamique dans C#?Opérateur dynamique 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)
Vous ne pouvez pas créer d'opérateurs dynamiques, mais vous pouvez envelopper un opérateur dans un délégué. Vous pouvez utiliser lambdas pour simplifier la syntaxe.
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();
Bien que ce ne soit pas définitif, la future direction de C# consiste à implémenter le compilateur en tant que service. Ainsi, à un certain point, il peut être possible d'écrire du code qui évalue dynamiquement une expression.
C# 4.0 aura un mot-clé dynamique pour le typage dynamique.
Limité à v2 atm –
Pourquoi voulez-vous un opérateur dynamique? Peut-être que vous devriez essayer d'utiliser des génériques ou downcast à l'objet –
Interopération avec le cadre dynamique et les langues principalement. – Dykam
Vous pourriez trouver quelque chose comme Flee utile. Il y en a d'autres, mais leurs noms m'échappent maintenant.
Ferroutage sur la réponse 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");
}
Essayez googler pour une mise en œuvre C# Eval, comme cela ressemble à ce que vous recherchez. –
Question connexe: http://stackoverflow.com/questions/174664/operators-as-strings –