C #;сделать новый делегат без объявления метода отдельно? - PullRequest
6 голосов
/ 19 октября 2010

Я могу скомпилировать код, который включает в себя:

OperationDelegate myOpDelegate;
static OperatorDefinition[] definitions ={
                new OperatorDefinition("+",2,3,true, new OperationDelegate(OperationAdd)),
            };
delegate double OperationDelegate(double[] args);
static double OperationAdd(double[] args)
            {
                return args[0] + args[1];
            }

но я думаю, что мой код выглядел бы чище, если бы я мог сделать что-то похожее на это:

OperationDelegate myOpDelegate;
static OperatorDefinition[] definitions ={new OperatorDefinition("+",2,3,true, new OperationDelegate({return args[0]+args[1]}))};
delegate double OperationDelegate(double[] args);

потому что я хочу определить все о каждом OperatorDefinition в одном месте, а не определять функции отдельно. Есть ли способ сделать это в C #?

(любая другая критика в отношении моего кода тоже приветствуется)

Ответы [ 2 ]

8 голосов
/ 19 октября 2010

Изучите анонимные методы ... например, это: C # - Анонимный делегат

6 голосов
/ 20 октября 2010

Вы можете использовать лямбда-выражения с .Net 3.5:

 static OperatorDefinition[] definitions ={
    new OperatorDefinition("+",2,3,true, 
        args => args[0] + args[1])
    };

В вашем конструкторе OperatorDefinition последний параметр должен иметь тип Func<double[],double>

См .: http://msdn.microsoft.com/en-us/library/bb397687.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...