Вопрос

На этот вопрос уже есть ответ здесь:

Возможно ли иметь динамический оператор в 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)
Это было полезно?

Решение

Вы не можете создавать динамические операторы, но вы можете обернуть оператор в делегат.Вы можете использовать лямбды для упрощения синтаксиса.

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 # является реализация компилятора как сервиса.Таким образом, в какой-то момент может оказаться возможным написать код, который динамически вычисляет выражение.

Другие советы

Обобщение ответа Лбушкина:

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

Вы могли бы найти что-то вроде Бежать полезный.Есть и другие, но их имена прямо сейчас ускользают от меня.

C # 4.0 будет иметь ключевое слово dynamic для динамического ввода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top