C#/공부

C# 람다식

DoubleJK 2021. 9. 3. 15:54
728x90
namespace CSharp
{
    enum ItemType
    {
        Weapon,
        Armor,
        Ring,
    }

    enum Rarity
    {
        Nomal,
        Uncommon,
        Rare,
    }

    class Item
    {
        public ItemType itemType;
        public Rarity rarity;
    }

    class Program
    {
        static List<Item> items = new List<Item>();

        아래에 두 특정 아이템을 찾는 함수를
        static Item FindWeapon()
        {
            foreach (Item item in items)
            {
                if (item.itemType == ItemType.Weapon)
                {
                    return item;
                }
            }
            return null;
        }

        static Item FindRareWeapon()
        {
            foreach (Item item in items)
            {
                if (item.rarity == Rarity.Rare)
                {
                    return item;
                }
            }
            return null;
        }

        delegate bool ItemSelector(Item item);

        델리게이트를 사용하여 아래 두 함수를 하나로 압축할 수 있다.
        static Item FindItem(ItemSelector selector)
        {
            foreach (Item item in items)
            {
                if (selector(item))
                {
                    return item;
                }
            }
            return null;
        }
        
        델리게이트 함수에서 무기를 찾는 함수
        static bool IsWeapon(Item item)
        {
            return item.itemType == ItemType.Weapon;
        }        

        static void Main()
        {
            items.Add(new Item() { itemType = ItemType.Weapon, rarity = Rarity.Nomal });
            items.Add(new Item() { itemType = ItemType.Armor, rarity = Rarity.Uncommon });
            items.Add(new Item() { itemType = ItemType.Ring, rarity = Rarity.Rare });

            무기 말고 다른 아이템을 찾을 때마다 함수를 생성해야   하는데
            Item weaponItem1 = FindItem(IsWeapon);

            델리게이트를 사용한 무명 함수로 즉석에서 함수를 생성하거나
            Item weaponItem2 = FindItem(delegate (Item item)
            {
                return item.itemType == ItemType.Weapon;
            });

            람다식 Lambda : 무명 함수를 만드는데 사용하는 문법
            
            람다식을 이용해 간결하게 표현할 수 있다.
            Item weaponItem3 = FindItem((Item item) => { return item.itemType == ItemType.Weapon; });
        }
    }
728x90

'C# > 공부' 카테고리의 다른 글

C# Exception 예외처리  (0) 2021.09.06
C# Event  (0) 2021.09.03
C# Delegate  (0) 2021.09.03