C# 람다식 Ramdba

728x90
  • 람다식(Ramdba)

- 익명 메소드

- 메소드와 동일하게 입력(파라미터), 출력(리턴)

- 문법 : (매개변수) => { 함수 내부(식) };

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _120_Ramdba
{
    delegate void dPrint(string str);
    delegate int dAdd(int a);
    class Program
    {
        static public void CallPrint(string str)
        {
            Console.WriteLine(str);
        }
        static public int CallAdd(int a)
        {
            return a + a;
        }
        static void Main(string[] args)
        {
            dPrint dp = CallPrint;
            dp("CallPrint");
            dp = (str) => { Console.WriteLine(str); };
            dp("Ramdba");

            dAdd da = CallAdd;
            Console.WriteLine("CallAdd : " + da(10));
            da = (a) => { return a + a; };
            Console.WriteLine("Ramdba : " + da(10));
        }
    }
}

 

  • 리스트와 람다식

- 리스트 함수 중 delegate 파라미터

- Collections에서 다양하게 활용

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _121_ListRamdba
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> listData = new List<int> { 1, 2, 3, 100, 200, 300 };

            //public delegate bool Predicate<in T>(T obj);
            //public List<T> FindAll(Predicate<T> match);
            List<int> listfindAll = listData.FindAll((num) => { return num < 200; });  //(num) => num < 100

            Console.WriteLine("200보다 작은 모든 수 : ");
            foreach(int a in listfindAll)
            {
                Console.WriteLine("a : " + a);
            }
            int findNum = listData.Find((num) => num % 2 == 0);
            Console.WriteLine("첫번째 짝수 : " + findNum);
        }
    }
}

 

  • 함수와 람다식

- 함수의 파라미터

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _122_FuncRamdba
{
    delegate void dPrint(string str);
    delegate void dFunc();
    class Program
    {
        static public void CallPrint(string str)
        {
            Console.WriteLine(str);
        }
        static public void CallBackFunc(dPrint dp, string msg)
        {
            if (null != dp)
                dp("CallBackFunc : " + msg);
        }
        static void Main(string[] args)
        {
            CallBackFunc(CallPrint, "Hello");  //함수 연결
            CallBackFunc(delegate (string str) { Console.WriteLine(str); }, "Hello"); //delegate 직접
            CallBackFunc((string str) => { Console.WriteLine(str); }, "Hello"); //람다의 식형태
            CallBackFunc((str) => Console.WriteLine(str), "Hello"); //람다식 기본
            CallBackFunc(str => Console.WriteLine(str), "Hello");

            dFunc dfunc = () => Console.WriteLine("No Params");  //파라미터가 없는 경우 () 반드시 사용
        }
    }
}

 

  • Action과 Func

- Action : 리턴값이 없는 경우(void)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _123_Action
{
    class Program
    {
        static void CallAction()
        {
            Console.WriteLine("CallAction");
        }
        static void Main(string[] args)
        {
            Action aFunc;
            Action<int> aFunc2;
            Action<float, int> aFunc3;

            aFunc = CallAction;
            aFunc2 = (num) => Console.WriteLine("num : " + num);
            aFunc3 = (a, b) =>
            {
                float result = b / a;
                Console.WriteLine("a : " + a + "b : " + b + " result : " + result);
            };

            aFunc();
            aFunc2(100);
            aFunc3(6.0f, 10);  // 10/6 
        }
    }
}

 

- Func : 리턴값이 있는 경우

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _124_Func
{
    class Program
    {
        static int CallFunc()
        {
            return 100;
        }
        static void Main(string[] args)
        {
            Func<int> aFunc;
            Func<int, float> aFunc2;
            Func<int, int, int> aFunc3;

            aFunc = CallFunc;
            aFunc2 = (int a) => { return (float)(a / 2.0f); };
            aFunc3 = (a, b) => (a + b);

            Console.WriteLine("aFunc : " + aFunc());
            Console.WriteLine("aFunc2 : " + aFunc2(10));
            Console.WriteLine("aFunc3 : " + aFunc3(100, 100));
        }
    }
}

 

728x90