2016년 4월 22일 금요일

[C#] Lambda expression-1



코드로서의 람다식

  1. class Program
  2. {
  3. delegate int? MyDivide(int a, int b);
  4. static void Main(string[] args)
  5. {
  6. MyDivide myFunc = (a, b) =>
  7. {
  8. if (b == 0)
  9. {
  10. return null;
  11. }
  12. return a / b;
  13. };
  14. Console.WriteLine("10 / 0 = " + myFunc(10, 0));
  15. }
  16. }

Func, Action 델리게이트를 이용한 Lambda expression

  1. // public delegate void Action(T obj);
  2. // 반환값이 없는 델리게이트로서 T 형식 매개변수는 입력될 인자 1개의 타입을 지정
  3. // public delegate TResult Func();
  4. // 반환값이 있는 델리게이트로서 TResult 형식 매개변수는 반환될 타입을 지정
  5. class Program
  6. {
  7. static void Main()
  8. {
  9. Action log = (text) =>
  10. {
  11. Console.WriteLine(text);
  12. };
  13. log("Hello world!");
  14. Func age = (a, b) => a + b;
  15. Console.WriteLine(age(14, 14));
  16. }
  17. }
  18. /*
  19. public delegate void Action(T arg);
  20. public delegate void Action(T1 arg1, T2 arg2);
  21. ...
  22. T1~T16까지 Action delegate 정의
  23. public delegate TResult Func();
  24. public delegate TResult Func(T arg);
  25. public delegate TResult Func(T1 arg1, T2 arg2);
  26. ...
  27. T1 ~ T16까지 Func delegate 정의
  28. */

Collection & Lambda expression [ForEach]

  1. // List에 정의된 ForEach
  2. // public void ForEach(Action action);
  3. // Array에 정의된 ForEach
  4. // public static void ForEach(T [] array, Action action);
  5. class Program
  6. {
  7. static void Main()
  8. {
  9. List list = new List { 1, 2, 3, 10, 100 };
  10. // 일반형식
  11. foreach(var item in list)
  12. {
  13. Console.WriteLine(item + " * 2 == " + (item * 2));
  14. }
  15. // 람다식
  16. list.ForEach((elem) => { Console.WriteLine(elem + " * 2 == " + (elem * 2)); });
  17. // 또는
  18. Array.ForEach(list.ToArray(), (elem) => { Console.WriteLine(elem + " * 2 == " + (elem * 2)); });
  19. }
  20. }

Collection & Lambda expression [FindAll, Where, Count, Select]

  1. class Program
  2. {
  3. static void Main()
  4. {
  5.  
  6. List list = new List { 1, 2, 3, 10, 100, 501 };
  7. // 짝수로 구성된 리스트 반환
  8. List result = new List();
  9. // 일반형식
  10. foreach (var item in list)
  11. {
  12. if (item % 2 == 0)
  13. {
  14. result.Add(item);
  15. }
  16. }
  17. // FindAll
  18. result = list.FindAll((elem) => elem % 2 == 0);
  19. // Where
  20. IEnumerable enumList = list.Where((elem) => elem % 2 == 0);
  21. // Count
  22. int count = list.Count((elem) => elem > 3);
  23. // Select
  24. IEnumerable doubleList = list.Select((elem) => (double)elem);
  25. IEnumerable personList = list.Select((elem) => new Person {Age = elem, Name = Guid.NewGuid().ToString()});
  26. var itemList = list.Select((elem) => new {TypeNo = elem, CreateDate = DateTime.Now});
  27. }
  28. }
  29. class Person
  30. {
  31. public int Age {get; set;}
  32. public string Name {get; set;}
  33. }