반응형
1. Action 델리게이트 생성
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App() {
//대리자 초기화
Action hello = this.SayHello;
//대리차 호출
hello();
}
private void SayHello() {
Console.WriteLine("Say hello!");
}
}
}
----
2.익명과 람다식으로 대리자 초기화 -> 호출
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App()
{
//대리자 초기화
Action hello = () =>
{
Console.WriteLine("익명 람다식으로 초기화");
};
//대리차 호출
hello();
}
}
}
----
3. 매개변수가 있는 Action으로 delegates
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App()
{ //대리자 초기화
Action<string> creatunit = CreateUnit;
//대리자 호출
creatunit("Marine");
}
private void CreateUnit(string unit) {
Console.WriteLine("{0} 유닛이 생성되었습니다.", unit);
}
}
}
------
4.매개변수가 있는 람다식으로 바로 delegate 시키기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App()
{
Action<string> createUnit = (unit) =>
{
Console.WriteLine("{0} 유닛을 생성하였습니다.", unit);
};
createUnit("Zergling");
}
}
}
------
5.func<T,TResult> 대리자
T 값이 들어오고 / TResult 값으로 내보낸다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App()
{ //대리자 초기화
Func<int, int> add = this.Add;
//대리자 호출
int result = Add(10);
//출력
Console.WriteLine(result);
}
private int Add(int x){
return x + x;
}
}
}
------
6.func<T,TResult> 대리자 / 람다식으로
//람다식 안에 메서드 기능을 식으로
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App()
{ //대리자 초기화
Func<int, int> add = (x) => x + x;
//대리자 호출
int result = add(20);
//출력
Console.WriteLine(result);
}
}
}
//람다식 안에 메서드 기능을 문으로
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App()
{ //대리자 초기화
Func<int, int> add = (x) => { return x + x; };
//대리자 호출
int result = add(20);
//출력
Console.WriteLine(result);
}
}
}
-----
7. Linq와 람다식을 사용하여 Linq 기능 Where 와 Find 사용하기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App()
{
List<string> fruits = new List<string>();
fruits.Add("사과");
fruits.Add("포도");
fruits.Add("복숭아");
fruits.Add("딸기");
fruits.Add("딸기");
IEnumerable<string> foundFruits = fruits.Where(p => p == "딸기");
foreach (string fruit in foundFruits) {
Console.WriteLine(fruit);
}
string foundFruit = fruits.Find(x => x == "귤");
Console.WriteLine("foundFruit : {0}", foundFruit);
}
}
}
------
8. Linq와 람다식을 사용하여 // Find로 물건 찾기 , Where 로 갯수 찾기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class App
{
public App()
{ //컬렉션 생성
List<Fruits> fruits = new List<Fruits>();
// Fruits 객체 생성
Fruits fruits1 = new Fruits("포도");
Fruits fruits2 = new Fruits("사과");
Fruits fruits3 = new Fruits("사과");
Fruits fruits4 = new Fruits("딸기");
//컬렉션 추가
fruits.Add(fruits1);
fruits.Add(fruits2);
fruits.Add(fruits3);
fruits.Add(fruits4);
//컬렉션에서 Fruits객체의 이름이 xxx인것을 찾으세요
//Linq: Find + 람다
Fruits fruit = fruits.Find(x => x.fruitsName == "사과");
if (fruit != null)
{
Console.WriteLine("{0}를 찾았습니다!.", fruit.fruitsName);
}
else
{
Console.WriteLine("아무것도 찾지 못했습니다.");
}
//만약에 같은 이름의 요소가 있다면 모두 찾아서 출력 하세요
//Linq: Where + 람다
var foundFruits = fruits.Where(x => x.fruitsName == "사과");
Console.WriteLine("{0} 개 찾았습니다!", foundFruits.Count());
}
}
}
-----
9. List<T>.FindAll(Predicate<T>) 메서드 연습
List<Item> list = items.FindAll(FindWeaponType); // findAll 대리자에 직접 메서드 넣기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class Item {
public string ID{ get; set; }
public string ItemName { get; set; }
public string Type { get; set; }
public DateTime GetTime { get; set; }
//tostring 메소드로 일정한 포맷 만들기
public override string ToString()
{
return string.Format("{0} {1} {2} {3}", this.ID, this.ItemName,this.Type, this.GetTime);
}
}
public class App
{
public App()
{
//컬렉션 인스턴스화
List<Item> items = new List<Item>();
// 객체 생성
var items1 = new Item()
{
ID = "301",
ItemName = "전설의 검",
Type = "무기",
GetTime = new DateTime(2021, 03, 24)
};
var items2 = new Item()
{
ID = "302",
ItemName = "강력한 방패",
Type = "무기",
GetTime = new DateTime(2021, 03, 14)
};
//출력
Console.WriteLine(items1.ToString());
//추가
items.Add(items1);
items.Add(items2);
List<Item> list = items.FindAll(FindWeaponType);
// 요소 수
Console.WriteLine(list.Count);
// 출력
foreach (Item item in list)
{
Console.WriteLine(item.ToString());
}
}
private bool FindWeaponType(Item item) {
if (item.Type == "무기")
{
return true;
}
else {
return false;
}
}
}
}
//람다식으로 한번에 메서드 정의하기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study8
{
public class Item {
public string ID{ get; set; }
public string ItemName { get; set; }
public string Type { get; set; }
public DateTime GetTime { get; set; }
//tostring 메소드로 일정한 포맷 만들기
public override string ToString()
{
return string.Format("{0} {1} {2} {3}", this.ID, this.ItemName,this.Type, this.GetTime);
}
}
public class App
{
public App()
{
//컬렉션 인스턴스화
List<Item> items = new List<Item>();
// 객체 생성
var items1 = new Item()
{
ID = "301",
ItemName = "전설의 검",
Type = "무기",
GetTime = new DateTime(2021, 03, 24)
};
var items2 = new Item()
{
ID = "302",
ItemName = "강력한 방패",
Type = "무기",
GetTime = new DateTime(2021, 03, 14)
};
//출력
Console.WriteLine(items1.ToString());
//추가
items.Add(items1);
items.Add(items2);
//람다식으로 한번에 메서드 정의하기
List<Item> list = items.FindAll((item) =>
{
if (item.Type == "무기") return true;
else return false;
});
// 요소 수
Console.WriteLine(list.Count);
// 출력
foreach (Item item in list)
{
Console.WriteLine(item.ToString());
}
}
}
}
반응형
'C# > 수업과제' 카테고리의 다른 글
0329_복습 // Thread (0) | 2021.03.30 |
---|---|
0324_ JSON 파일 리스트화 (0) | 2021.03.24 |
0322_ delegates 연습 (0) | 2021.03.22 |
0321 _ 현재 본인 판단 표 (0) | 2021.03.21 |
0318_ArrayList, List<T>, Dictionary 예제 연습 (0) | 2021.03.19 |