131 lines
2.6 KiB
C#
131 lines
2.6 KiB
C#
internal class Program
|
|
{
|
|
private static void Main(string[] args)
|
|
{
|
|
Console.WriteLine("Hello, World!");
|
|
}
|
|
}
|
|
|
|
class AClass
|
|
{
|
|
public void Run()
|
|
{
|
|
// Action<T>
|
|
// 입력 : T 타입
|
|
// 리턴갑 : 없음
|
|
|
|
// 기존 메서드 지정
|
|
System.Action<string> act = Output;
|
|
act("Hello");
|
|
|
|
// 무명 메서드 지정
|
|
Action<string, string> act2 = delegate (string msg, string title)
|
|
{
|
|
Console.WriteLine(msg, title);
|
|
};
|
|
act2("No data found", "Error");
|
|
|
|
// 람다식 사용
|
|
Action<int> act3 = code => Console.WriteLine("Code: {0}", code);
|
|
act3(1033);
|
|
}
|
|
|
|
void Output(string s)
|
|
{
|
|
Console.WriteLine(s);
|
|
}
|
|
}
|
|
|
|
class BClass
|
|
{
|
|
int _state;
|
|
//---------------------
|
|
// 예제 1
|
|
// Func<TResult>
|
|
// 입력: 없음
|
|
// 리턴: TResult 타입
|
|
//---------------------
|
|
public void Run()
|
|
{
|
|
// 메서드 지정
|
|
System.Func<bool> f = IsValid;
|
|
bool result = f();
|
|
|
|
// 무명 메서드 지정
|
|
Func<bool> fa = delegate
|
|
{
|
|
return _state == 0;
|
|
};
|
|
result = fa();
|
|
|
|
// 람다식 이용
|
|
Func<bool> fb = () => _state == 0;
|
|
result = fb();
|
|
}
|
|
|
|
bool IsValid()
|
|
{
|
|
return _state == 0;
|
|
}
|
|
|
|
//---------------------
|
|
// 예제 2
|
|
// Func<T1, TResult>
|
|
// 입력: 1개
|
|
// 리턴: TResult 타입
|
|
//---------------------
|
|
public void Run1()
|
|
{
|
|
// 메서드 지정
|
|
System.Func<int, bool> f = IsValidRange;
|
|
bool result = f(10);
|
|
|
|
// 무명 메서드 지정
|
|
Func<int, bool> fa = delegate (int n)
|
|
{
|
|
return n > 0;
|
|
};
|
|
result = fa(-1);
|
|
|
|
// 람다식 이용
|
|
Func<int, bool> fb = n => n > 0;
|
|
result = fb(-2);
|
|
}
|
|
|
|
bool IsValidRange(int n)
|
|
{
|
|
return n > 0;
|
|
}
|
|
|
|
void Predicate()
|
|
{
|
|
// Predicate<T>
|
|
Predicate<int> p = delegate (int n)
|
|
{
|
|
return n >= 0;
|
|
};
|
|
bool res = p(-1);
|
|
|
|
Predicate<string> p2 = s => s.StartsWith("A");
|
|
res = p2("Apple");
|
|
}
|
|
|
|
public void UsePredicate()
|
|
{
|
|
int[] arr = { -10, 20, -30, 4, -5 };
|
|
|
|
// Predicate의 사용
|
|
// Array.Find(int[], Predicate<int>)
|
|
int pos = Array.Find(arr, IsPositive);
|
|
|
|
// LINQ에서 Func의 사용
|
|
// Where(Func<int, bool> predicate)
|
|
var v = arr.Where(n => n >= 0);
|
|
}
|
|
|
|
bool IsPositive(int i)
|
|
{
|
|
return i >= 0;
|
|
}
|
|
|
|
} |