Подтвердить что ты не робот

Что означает синтаксис '=>' в С#?

Я просто воспользовался этим синтаксисом в некоторых вопросах на этом форуме, но Google и любые другие поисковые системы имеют тенденцию блокировать что-либо, кроме букв и цифр, в поиске, поэтому невозможно найти "= > ".

Так может кто-нибудь сказать мне, что это такое и как он используется?

4b9b3361

Ответ 1

Это лямбда-оператор.

От С# 3 до С# 5 это использовалось только для лямбда-выражений. Это в основном более короткая форма анонимных методов деревья выражений.

В качестве примера:

Func<Person, string> nameProjection = p => p.Name;

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

Func<Person, string> nameProjection = delegate (Person p) { return p.Name; };

В обоих случаях вы создаете делегат с параметром Person, возвращая это имя человека (в виде строки).

В С# 6 тот же синтаксис используется для элементов с выражением, например.

// Expression-bodied property
public int IsValid => name != null && id != -1;

// Expression-bodied method
public int GetHashCode() => id.GetHashCode();

См. также:

(И действительно, многие подобные вопросы - попробуйте теги lambda и lambda-expressions.)

Ответ 2

Это означает удивительность. Например,

x => x + 1

представляет собой метод, который принимает x как параметр и возвращает его преемника.

button.Click += new EventHandler((sender, e) => methodInfo.Invoke(null, new object[] { sender, e }));

назначает обработчик события кнопке, вызывая метод, который имеет свойство MethodInfo.

Ответ 3

здесь простой пример из msdn

delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25

Все, что перед значением = > являются входными параметрами, и все, что угодно, является выражением. Вы можете иметь несколько входных параметров. Lambdas в основном используются с Linq.

Ответ 4

Это еще одна форма обозначения функций. Ниже приведены примерно следующие значения:

// explicit function
int MyFunc(int pParam)
{
   return pParam;
}

// delegate function
Func<int, int> MyFunc = delegate(int pParam) { return pParam; };

// lambda expression
Func<int, int> MyFunc = x => x;

Подумайте о лямбда-выражении, говорящем: "Дайте что-нибудь, верните что-нибудь". В приведенном выше примере функция x => x говорит "заданный x, return x". (Хотя лямбда-выражения не обязательно должны что-то возвращать, в этом случае вы можете прочитать их как "заданные x, сделать что-то с x".)

Ответ 5

Вместо использования анонимного метода:

somevar.Find(delegate(int n)
{
   if(n < 10)
      return n;
});

вы просто пишете это следующим образом:

somevar.Find(n => n < 10);

Он примет тип данных на основе возвращаемого значения.

Ответ 6

В основном это означает "входит в", как параметр

MyObjectReference => MyObjectReference.DoSomething()

Обычно вы используете их для передачи функций в методы как параметры или в операторы LINQ

MyCollection.Where(myobj => myobj.Age>10)

Например.

Ответ 7

Это часть синтаксиса лямбда-выражения. Выражение лямбда по существу является сокращенной формой делегата или анонимного метода. Чтобы проиллюстрировать, предположим, что у меня есть массив строк, соответствующих буквам алфавита. Я мог бы выделить элементы этого массива, содержащие значения больше, чем "E" со следующим выражением LINQ:

var someLetters = alphabet.Where(l = > l > "E" );

Часть выражения лямбда слева от "= > " идентифицирует имя переменной для теста (которое задано для отдельных членов алфавита) и часть выражения лямбда справа от "= > " определяет обработку. В этом случае обработка создает логическое значение, которое логика Where использует для определения того, прошел ли каждый член алфавита в массив someLetters.