Что делает оператор =>? - PullRequest
       30

Что делает оператор =>?

2 голосов
/ 21 октября 2009

Я работаю над учебником по C # / ASP.NET и сталкиваюсь с оператором, которого никогда раньше не видел.

return RSVPs.Any(r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase));

что означает => в этой строке кода ??

Ответы [ 5 ]

3 голосов
/ 21 октября 2009

Это синтаксис, который определяет лямбда-выражение. По сути, это сокращение для делегата / анонимного метода в C #

Func<int,int> add2 = x => x + 2;
int value = add2(42); // value == 44

В этом конкретном примере это определение делегата, который принимает экземпляр RSVP и возвращает значение true, если значение AttendeeName равно переданному userName. Метод расширения Any возвращает true, если переданный в делегате значение true для любого значения в коллекции.

Вот расширенный способ написания отправленного вами образца.

Func<RSPV,bool> del = r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase);
return RSVPS.Any(del);
2 голосов
/ 21 октября 2009

Это лямбда-выражение. В приведенном вами примере «r» - это элемент в списке. Этот код будет перебирать ваш список [RSVP], ища «r», где AttendeeName совпадает с тем, что есть в вашем userName.

Чтобы понять, что происходит, вам нужно понять делегатов, но по сути версия Coles Notes состоит в том, что параметр слева от => (в данном случае r) является элементом в списке [RSVPs], который последовательно проходя итерацию, для каждого экземпляра r вы что-то проверяете. С точки зрения пользователя это примерно эквивалентно:

public bool HasRSVP(List<RSVP> RSVPs, string userName)
{
    foreach(RSVP r in RSVPs)
        if(r.AttendeeName.Equals(userName, StringComparison.InvariantCulture))
            return true;
    return false;
}
2 голосов
/ 21 октября 2009

Определяет лямбда-выражение .

r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase)

эквивалентно

delegate( RSVP r ) { return r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase); }
1 голос
/ 21 октября 2009

Все лямбда-выражения используют лямбда-оператор =>, который читается как «идет». Левая часть лямбда-оператора указывает входные параметры (если есть), а правая часть содержит блок выражений или операторов. Лямбда-выражение x => x * x читается как «x соответствует x раз x». Это выражение может быть назначено типу делегата следующим образом:

delegate int del(int i);
static void Main(string[] args)
{
    del myDelegate = x => x * x;
    int j = myDelegate(5); //j = 25
}

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

Func<int, bool> myFunc = x => x == 5;
bool result = myFunc(4); // returns false of course
0 голосов
/ 21 октября 2009

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

return RSVPs.Any(delegate (RSVP r) { r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase) });

Или эквивалентное дерево выражений:

Expression<Func<RSVP, bool>> e = r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...