Немного упрощенно: функция лямбда - это функция, которая может быть передана другим функциям и доступна для доступа к логике.
В синтаксисе C # лямбда часто компилируется в простые методы так же, как анонимные делегаты, но
Например, (в C # 3):
LinqToSqlContext.Where(
row => row.FieldName > 15 );
LinqToSql может читать эту функцию (x> 15) и преобразовывать ее к фактическому SQL для выполнения с использованием деревьев выражений.
Вышеприведенное утверждение становится:
select ... from [tablename]
where [FieldName] > 15 --this line was 'read' from the lambda function
Это отличается от обычных методов или анонимных делегатов (которые действительно являются манерами компилятора), потому что они не могут быть прочитаны .
Не все методы в C #, которые используют лямбда-синтаксис, могут быть скомпилированы в деревья выражений (т.е. фактические лямбда-функции). Например:
LinqToSqlContext.Where(
row => SomeComplexCheck( row.FieldName ) );
Теперь дерево выражений невозможно прочитать - SomeComplexCheck не может быть разбит. Оператор SQL будет выполняться без того, и каждая строка данных будет помещена через SomeComplexCheck
.
Функции Lambda не следует путать с анонимными методами. Например:
LinqToSqlContext.Where(
delegate ( DataRow row ) {
return row.FieldName > 15;
} );
У этого также есть встроенная функция, но на этот раз это просто магия компилятора - компилятор C # разделит это на новый метод экземпляра с автогенерированным именем.
Анонимные методы не могут быть прочитаны, и поэтому логика не может быть переведена так, как может, для лямбда-функций.
Просто для того, чтобы поместить все отличные комментарии в код (и добавить небольшое изменение моего собственного):
Sub PopupBox()
If MsgBox("Add Comments or Images to Category?", vbYesNo + vbQuestion, "Comment") = vbYes Then
ActiveWorkbook.Sheets("Comments").Activate
ActiveWorkbook.Sheets("Comments").Range ("B7")
End If
End Sub
В большинстве случаев я бы поступил точно так же, как вы, назначив ответ MsbBox для переменная, но в чем-то таком простом я бы не стал беспокоиться о дополнительном коде и просто поместил бы MsgBox прямо в «If».
Если вы хотите выбрать эту ячейку, вам нужно сначала активировать лист:
ActiveWorkbook.Sheets("Comments").Activate
ActiveWorkbook.Sheets("Comments").Range("B7").Select