C#.
C# 람다
Muru
2023. 11. 15. 23:01

람다식:
(매개변수목록) => 식
문 형식의 람다
(매개변수목록 =>
{
문장1;
문장2;
...;
문장N;
}

무명함수: 람다식으로 만드는 익명메소드
익명 메소드에는 대리자(반환 + 매개변수)로 작성한다.
무명함수를 작성하기 위해서는 먼저, 대리자로 무명함수의 모습을 결정.
delegate int Calculate(int a, int b);
//...
static void Main(string[] args)
{
Calculate cal = (int a, int b) => a + b;
Console.WriteLine(cal(1,2)); //결과 3
}
static void Main(string[] args)
{
delegate int Calculate(int a, int b);
//...
Calculate car = **(a, b)** => a + b;
Console.WriteLine(car(1, 2)); ;
}
delegate void DoSomething();
static void Main(string[] args)
{
DoSomething Doit ( ) = >
{
Console.WriteLine("이게 값이야");
}
Doit();
}
=======================================

익명 메서드나 무명메서드에 Func, Action대리자가 유용하다.
namespace ConsoleApp12
{
enum ItemType
{
Weapon,
Armor,
Amulet,
Ring
}
enum Rarity
{
Normal,
Uncommon,
Rare,
}
class Item
{
public ItemType Itemtype;
public Rarity Rarity;
}
class MainApp
{
static List<Item> _items = new List<Item>();
delegate bool ItemSelector(Item item);
static bool IsWeapon(Item item)
{
return item.Itemtype == ItemType.Weapon;
}
static Item FindItem(MyFunc<Item, bool> selector)
{
foreach (Item item in _items)
{
if (selector(item))
return item;
}
return null;
}
static void Main(string[] args)
{
// Lambda : 일회용 함수를 만듦.
_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 });
ItemSelector selector = new ItemSelector((Item item) => { return item.ItemType == ItemType.Weapn});
// Anonymous Function: 무명, 익명 함수
Item item = FindItem(delegate (Item item) { return item.Itemtype == ItemType.Weapon; });
Item item2 = FindItem((Item item) => { return item.Itemtype == ItemType.Weapon; });
}
}
}

static List<Item> _items = new List<Item>();
delegate Return MyFunc<Return>();
delegate Return MyFunc<T, Return>(T item);
delegate Return MyFunc<T1, T2, Return>(T1 t1, T2 t2);
static bool IsWeapon(Item item)
{
return item.Itemtype == ItemType.Weapon;
}
//...
=======================================
namespace ConsoleApp12
{
enum ItemType
{
Weapon,
Armor,
Amulet,
Ring
}
enum Rarity
{
Normal,
Uncommon,
Rare,
}
class Item
{
public ItemType Itemtype;
public Rarity Rarity;
}
class MainApp
{
static List<Item> _items = new List<Item>();
static bool IsWeapon(Item item)
{
return item.Itemtype == ItemType.Weapon;
}
static Item FindItem(Func<Item, bool> selector)
{
foreach (Item item in _items)
{
if (selector(item))
{
return item;
}
}
return null;
}
static void Main(string[] args)
{
// Lambda : 일회용 함수를 만듦
_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 });
// Anonymous Function: 무명, 익명 함수
Item item = FindItem((Item item) => { return item.Itemtype == ItemType.Weapon; });
}
}