0323 익명 함수
2021. 3. 23. 16:31ㆍC#/수업내용
메서드를 매개 변수로 전달할 수 있다.
람다 식을 사용한다.
람다 식 => 람다 선언 연산자를 사용하여 본문에서 람다의 매개 변수 목록을 구분
식에 {} 붙어있으면 문 람다 ;
대리자+익명함수(lambda)
public App()
{
Console.WriteLine("App");
Action sayHello = this.SayHello;
Action sayhello = () => { Console.WriteLine("Hello Word "); };
//대리자 초기화
Action<string> SendMessage = this.SendMessage;
Action<string> sendMessage = (message) => { Console.WriteLine(message); };
//대리자 호출
sendMessage("안녕하세요");
SendMessage("안녕하세요");
}
private void SayHello()
{
Console.WriteLine("Hello World");
}
private void SendMessage(string message)
{
Console.WriteLine(message);
}
public class App
{
public App()
{
Func<int, int> multiply = (x) =>
{
return x * x;
};
int result = multiply(5);
Console.WriteLine(result);
}
}
무명 메서드/익명 메서드
public class App
{
public App()
{
Func<string, int, bool> checkStringLength = (message, length) =>
{
return message.Length > length;
};
bool result = checkStringLength("Hello World", 5);
Console.WriteLine(result);
Action Hi = () =>
{
Console.WriteLine("Hello");
Console.WriteLine("World");
};
Hi();
}
}
Linq 쿼리
배열, 열거식, 클래스 등으로부터 데이터를 편리하게 추출하고 가공하기 위해 사용한다.
public class App
{
public App()
{
List<string> items = new List<string>();
items.Add("장검");
items.Add("도끼");
items.Add("활");
items.Add("단검");
items.Where(p => p == "단검");
IEnumerable<string> foundNames = items.Where(p => p == "단검");
foreach (string name in foundNames)
{
Console.WriteLine(name);
break;
}
string foundItems=items.Find(x => x == "단검");
Console.WriteLine("found: {0}",foundItems);
}
}
public class App
{
public App()
{
List<Item> items = new List<Item>();
//Item 객체 생성
Item item1 = new Item("이루실의 직검");
Item item2 = new Item("빛의 탈리스만");
Item item3 = new Item("부러진 직검");
Item item4 = new Item("벌어진 검");
//컬렉션 추가
items.Add(item1);
items.Add(item2);
items.Add(item3);
items.Add(item4);
//컬렉션에서 item객체의 이름이 xxx인 것을 찾으시오
//Linq: find+lambda
items.Find(p => p == item1);
foreach (Item item in items)
{
Console.WriteLine(item);
}
//만약에 같은 이름의 요소가 있다면 모두 찾아서 출력하세요.
//Linq: Where+lambda
items.Where(p => p == item1);
IEnumerable<Item> foundNames = items.Where(p => p == item1);
foreach (Item item in items)
{
Console.WriteLine(item);
break;
}
}
}
public class App
{
public class Book
{
public string ID { get; set; }
public string Title { get; set; }
}
public App()
{
List<Book> books = new List<Book>();
books.Add(new Book() { ID = "bk109", Title = "어린왕자" });
books.Find(delegate (Book book)
{
return book.ID == "bk109";
});
Book foundBook = books.Find((book) => book.ID == "bk109");
if (foundBook != null)
{
Console.WriteLine("{0},{1}", foundBook.ID, foundBook.Title);
}
}
}
★★★★★★★
public class App{
public App()
{
Treasure[] treasures;
treasures = new Treasure[12];
Treasure treasure1 = new Treasure("문지기 유령의 오른쪽 뿔", eGrade.Common, 7);
Treasure treasure2 = new Treasure("어린 순례자의 장난감 새총", eGrade.Rare, 3);
Treasure treasure3 = new Treasure("행복한 곰젤리의 숨겨둔 사탕", eGrade.Common, 7);
Treasure treasure4 = new Treasure("왕자 곰젤리의 젤리시계", eGrade.Common, 2);
Treasure treasure5 = new Treasure("나이든 순례자의 무공비급", eGrade.Epic, 7);
Treasure treasure6 = new Treasure("작은 뿔꿈틀이의 방어용 점액", eGrade.Epic, 2);
Treasure treasure7 = new Treasure("무녀맛 쿠키의 영험한 부적", eGrade.Rare, 4);
Treasure treasure8 = new Treasure("골카론의 날카로운 낫", eGrade.Rare, 5);
Treasure treasure9 = new Treasure("아이스크림 상인의 신기루 아이스크림", eGrade.Rare, 5);
Treasure treasure10 = new Treasure("설탕백조의 샤이닝 깃털", eGrade.Epic, 2);
Treasure treasure11 = new Treasure("치즈볼새의 동전 주머니", eGrade.Common, 2);
Treasure treasure12 = new Treasure("순례자 마을 촌장의 횃불", eGrade.Epic, 3);
treasures[0] = treasure1;
treasures[1] = treasure2;
treasures[2] = treasure3;
treasures[3] = treasure4;
treasures[4] = treasure5;
treasures[5] = treasure6;
treasures[6] = treasure7;
treasures[7] = treasure8;
treasures[8] = treasure9;
treasures[9] = treasure10;
treasures[10] = treasure11;
treasures[11] = treasure12;
Console.WriteLine(treasures.Length);
treasures.Sort(CompareByGrade);
}
private eGrade CompareByGrade(eGrade epic, eGrade common)
{
int grade = 0.CompareTo(2);
if (grade == 0)
{
return eGrade.Epic;
}
else
{
if(grade ==1)
{
return eGrade.Rare;
}
return eGrade.Common;
}
}
}
public enum eGrade {
Epic, Rare, Common}
public class Treasure
{
public string itemName;
public eGrade grade;
public int level;
public Treasure(string name, eGrade grade, int level)
{
this.itemName = name;
this.grade = grade;
this.level = level;
}
}
'C# > 수업내용' 카테고리의 다른 글
0324 복습 (0) | 2021.03.24 |
---|---|
0323 대리자를 이용해 다중 메서드 호출 Multicast delegate/delegate chaining (0) | 2021.03.23 |
0322 대리자 delegate★★ (0) | 2021.03.22 |
0321 기초 복습! (0) | 2021.03.19 |
0319 확장 메서드 extension method (0) | 2021.03.19 |