1
2
3
4
|
var hello = () => Console.WriteLine("Salom"); Salom(); // Salom
Salom(); // Salom
Salom(); // Salom
|
Lekin bu holatda salom qaysi turni ifodalaydi? Yashirin terish bilan kompilyatorning o'zi ba'zi delegatlar bilan ta'rifi asosida lambda ifodasini moslashtirishga harakat qiladi. Misol uchun, yuqorida tavsiflangan standart salom lambda ifodasi kompilyator tomonidan hech qanday parametrlarni qabul qilmaydigan va hech narsa qaytarmaydigan o'rnatilgan Action delegatining o'zgaruvchisi sifatida ko'rib chiqiladi . Parametrlar ro'yxatini belgilashda biz ular uchun ma'lumotlar turini belgilamasligimiz mumkin:
1
2
3
4
5
|
Operation sum = (x, y) => Console.WriteLine($"{x} + {y} = {x + y}");
sum(1, 2); // 1 + 2 = 3
sum(22, 14); // 22 + 14 = 36
delegate void Operation(int x, int y);
|
Bunday holda, kompilyator yig'indisi lambda ifodasi Operatsiya turini ifodalashini ko'radi, ya'ni ikkala lambda parametri ham turni
ifodalaydi int. Shuning uchun hech qanday muammo tug'ilmaydi. Biroq, agar biz yashirin yozishdan foydalansak, kompilyator lambda ifodasi uchun delegat turini xulosa qilishda qiyinchiliklarga duch kelishi mumkin, masalan, quyidagi holatda
|