2010-09-02 1 views
28

Я прочитал эту интересную строку here, в ответ от Jon Skeet.Значение() => Оператор в C#, если он существует

Интересная линия это, где он выступал с помощью делегата:

Log.Info("I did something: {0}",() => action.GenerateDescription()); 

Вопрос в том, что это() => оператор, интересно? Я попробовал Google, но так как это сделано из символов, на самом деле Google не может быть очень полезной. Я смущающе что-то упустил?

+2

Обратите внимание, что грамматический это => то есть оператор и() и выражение, которые являются его операндами. Это странный оператор; большинство двоичных операторов принимают два выражения, а не список аргументов и выражение-или-блок. –

ответ

46

Это вводит функцию лямбда (анонимный делегат) без параметров, это эквивалентно и в основном короткие руки для:

delegate void() { return action.GenerateDescription(); } 

Вы можете добавить параметры, так что:

(a, b) => a + b 

Это примерно эквивалентно:

delegate int (int a, int b) { return a + b; } 
+4

Вероятно, 'return action.GenerateDescription();', no? – abatishchev

+0

@abatishchev: Спасибо, исправлено. –

+2

Грубо, действительно. Для моей серии о некоторых тонких различиях между синтаксисом лямбда и синтаксисом анонимного метода начинаются здесь: http://blogs.msdn.com/b/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous -methods-part-one.aspx –

2

Создание анонимного делегата указанному методу.

Возможно, в вашем случае это будет Func<string>

3

Это пример выражения лямбда, вы можете узнать больше here.

+0

Даже лучше, чем просеивать через SO, нужно перейти прямо к источнику: http://msdn.microsoft.com/en-us/library/bb397687.aspx –

1

Это способ передать анонимный делегат без параметров как выражение лямбда.

Подобно этому с .NET 2,0

Log.Info("I did something: {0}", delegate() 
      { 
       return action.GenerateDescription(); 
      }); 
+0

Вероятно, 'return action.GenerateDescription();', no? В противном случае ошибка «Can not cast void to string», что-то вроде этого – abatishchev

+0

@abatishchev, возможно, да. Написал это с головы, поэтому я не уверен, что он даже компилируется. – PiRX

+0

Не могли бы вы попробовать, и если это не удастся - отредактируйте свой пост, пожалуйста?) – abatishchev

6

«=>» это оператор лямбда, когда мы не имеем каких-либо входных параметров мы просто использовать круглые скобки, прежде чем оператор лямбда.

Синтаксис: (входные параметры) => выражение

Смежные вопросы