Что означает () => в C #? - PullRequest
       12

Что означает () => в C #?

10 голосов
/ 01 августа 2009

Я прочитал исходный код для Moq и наткнулся на следующий модульный тест:

Assert.Throws<ArgumentOutOfRangeException>(() => Times.AtLeast(0));

И я не помню, что на самом деле делает () =>. Я думаю, что это как-то связано с анонимными методами или лямбдами. И я уверен, что знаю, что он делает, я просто не помню сейчас ...

И что еще хуже .... Google не особо помогает и , а также не работает stackoverflow

Может кто-нибудь дать мне быстрый ответ на довольно нубистский вопрос?

Ответы [ 6 ]

13 голосов
/ 01 августа 2009

Поиск StackOverflow для "лямбда".

В частности:

() => Console.WriteLine("Hi!");

Это означает «метод, который не принимает аргументов и возвращает void, а когда вы вызываете его, он записывает сообщение в консоль».

Вы можете сохранить его в переменной Action:

Action a = () => Console.WriteLine("Hi!");

И тогда вы можете назвать это:

a();
12 голосов
/ 01 августа 2009

() => является нулевым лямбда-выражением. она представляет анонимную функцию, которая передается assert.Throws и вызывается где-то внутри этой функции.

void DoThisTwice(Action a) { 
    a();
    a();
}
Action printHello = () => Console.Write("Hello ");
DoThisTwice(printHello);

// prints "Hello Hello "
9 голосов
/ 01 августа 2009

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

n => Times.AtLeast(n)

Если число параметров отличается от одного, необходимо указать круглые скобки:

(n, m) => Times.AtLeast(n + m)

При нулевых параметрах вы получаете несколько неудобный синтаксис с круглыми скобками вокруг пустого списка параметров:

() => Times.AtLeast(0)
4 голосов
/ 01 августа 2009
() => Times.AtLeast(0)

() указывает, что лямбда-функция не имеет параметров или возвращаемого значения.

=> указывает, что блок кода должен следовать.

Times.AtLeast (0) вызывает статический метод класса Times AtLeast с параметром 0.

2 голосов
/ 01 августа 2009

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

По сути, у вас есть фрагмент кода, который проверяет, что Times.AtLeast (0) создает исключение ArgumentOutOfRangeException. Лямбда-функция необходима (вместо того, чтобы просто пытаться вызвать функцию Times.AtLeast непосредственно из Assert.Throws), чтобы передать правильный аргумент для теста - в данном случае 0.

MSDN KB статья по теме здесь: http://msdn.microsoft.com/en-us/library/bb882516.aspx

0 голосов
/ 01 августа 2009

Я не программирую на C #, но Google "C # Lambda" предоставил ссылку , которая отвечает на ваш вопрос !!!

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