Что означает синтаксис '=>' в С#?
Я просто воспользовался этим синтаксисом в некоторых вопросах на этом форуме, но Google и любые другие поисковые системы имеют тенденцию блокировать что-либо, кроме букв и цифр, в поиске, поэтому невозможно найти "= > ".
Так может кто-нибудь сказать мне, что это такое и как он используется?
Ответы
Ответ 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.