(C#) 35. Lambda (람다식)
Syntax (문법)
(C#) 35. Lambda (람다식)
Lambda () : Syntax ()
- 최초 작성일: 2021년 3월 21일(월)
##
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Collections.Generic;
namespace Lambda
{
enum ItemType
{
Weapon,
Armor,
Amulet,
Ring
}
enum Rarity
{
Normal,
Uncommon,
Rare
}
class Item
{
public ItemType ItemType;
public Rarity Rarity;
}
class Program
{
static List<Item> _items = new List<Item>();
//delegate bool ItemSelector(Item item);
delegate Return MyFunc<T, Return>(T item);
//static bool IsWeapon(Item item)
//{
// return item.ItemType == ItemType.Weapon;
//}
//static Item FindItem(ItemSelector selector)
//static Item FindItem(MyFunc<Item, bool> selector)
static Item FindItem(Func<Item, bool> selector)
{
foreach (Item item in _items)
{
if (item.ItemType == ItemType.Weapon)
//if (selector(item)) // delegate
return item;
}
return null;
}
static void Main(string[] args)
{
_items.Add(new Item() { ItemType = ItemType.Weapon, Rarity = Rarity.Normal });
_items.Add(new Item() { ItemType = ItemType.Armor, Rarity = Rarity.Uncommon });
_items.Add(new Item() { ItemType = ItemType.Ring, Rarity = Rarity.Rare });
/*
* delegate를 직접 선언하지 않아도, 이미 만들어진 애들이 존재한다.
* -> 반환 타입이 있을 경우 Func 사용
* -> 반환 타입이 없으면 Action 사용
*/
// Item item = FindItem(IsWeapon);
// ItemSelector selector = new ItemSelector((Item item) => { return item.ItemType == ItemType.Weapon; });
// MyFunc<Item, bool> selector = (Item item) => { return item.ItemType == ItemType.Weapon; };
// Func<Item, bool> selector = (Item item) => { return item.ItemType == ItemType.Weapon; };
///
////////////////////////////////////////////////////////////////////////////////////////////////////////
///
// Lambda : 일회용 함수를 만드는데 사용하는 문법이다.
// Anonymous Function : 무명 함수 /익명 함수
Item item = FindItem((Item item) => { return item.ItemType == ItemType.Weapon; });
//Item item = FindItem((Item item) => { return item.ItemType == ItemType.Weapon; });
//Item item2 = FindItem(delegate (Item item) { return item.ItemType == ItemType.Weapon; });
//Item item = FindItem(selector);
Console.WriteLine("ItemType:\t" + item.ItemType);
Console.WriteLine("Rarity: \t" + item.Rarity);
}
}
}
Result
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
