๊น์ ์
ํ์ธ๋ํ๊ต 22ํ๋ฒ ์ปดํจํฐ๊ณตํ๊ณผ
ํ์ธ๋ํ๊ต 22ํ๋ฒ ์ปดํจํฐ๊ณตํ๊ณผ
class Points : IEnumerable, IEnumerator
{
List<Point> points = new List<Point>();
int index = -1;
public object Current => points[index];
public IEnumerator GetEnumerator()
{
Reset();
return this;
}
public bool MoveNext()
{
return ++index < points.Count;
}
}
class PointCompare : IComparer
{
public int Compare(object x, object y)
{
Point a = (Point)x;
Point b = (Point)y;
return a.X - b.X;
}
}
class Point : ICloneable
{
public object Clone()
{
return MemberwiseClone(); // ์์ ๋ณต์ฌ
}
// ๋๋ ๊น์ ๋ณต์ฌ
public Point Clone()
{
return new Point(X, Y);
}
}
int[] arr = { 30, 56, 78, 45, 12, 99, 33 };
arr.OrderBy(v => v)
.Where(v => v % 2 == 0)
.ToList()
.ForEach(v => Console.WriteLine(v));
// ๊ธฐ๋ณธ ๋ธ๋ฆฌ๊ฒ์ดํธ ์ ์ธ
delegate void PrintDel(int data);
// ์ ๋ค๋ฆญ ๋ธ๋ฆฌ๊ฒ์ดํธ ์ฌ์ฉ
Action<int> action = x => Console.WriteLine(x);
Func<int, int> func = x => x * x;
// ์ ๋ค๋ฆญ ๋ฉ์๋
static void Print<T>(T data)
{
Console.WriteLine($"data: {data}");
}
// ์ ๋ค๋ฆญ ํด๋์ค
class Stack<T>
{
List<T> lt = new List<T>();
public void Push(T data) { lt.Add(data); }
public T Pop() { /* ... */ }
}
// ref ๋งค๊ฐ๋ณ์
static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
// out ๋งค๊ฐ๋ณ์
static void Add(int a, int b, out int result)
{
result = a + b;
}
Func<int, int> del = a => a * a;
Action<int> print = x => Console.WriteLine(x);
List<int> lt = new List<int>();
lt.Add(10);
lt.Add(20);
lt.Add(30);
Thread t = new Thread(new ThreadStart(PrintInteger));
t.Start();
static void PrintID()
{
Console.Write($"[{Thread.CurrentThread.ManagedThreadId}]");
}
// ์ง์ญ๋ณ์ ๋ฒ์ - ๊ฐ ์ค๋ ๋๊ฐ ๋
๋ฆฝ์ ์ธ i๋ฅผ ๊ฐ์ง
static void PrintInteger()
{
for (int i = 0; i < 10; ++i) { ... }
}
// ์ ์ญ๋ณ์ ๋ฒ์ - ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ฐ์ i๋ฅผ ๊ณต์
static int i;
static void PrintInteger()
{
for (i = 0; i < 10; ++i) { ... }
}
class IndexEventArgs : EventArgs
{
public int Index { get; set; }
public int Data { get; set; }
}
class Server
{
public event EventHandler<IndexEventArgs> TestEvent;
public void PrintArray()
{
if (rand.Next(5) == 1)
TestEvent(this, new IndexEventArgs(i, arr[i]));
}
}
static int count = 0;
static object key = new object();
static void ThreadFunc(object param)
{
for (int i = 0; i < 1_000_000; ++i)
lock (key) // ์๊ณ ์์ญ ๋ณดํธ
{
++count;
}
}
Thread t1 = new Thread(new ParameterizedThreadStart(ThreadFunc));
t1.Start("100"); // ๋ฌธ์์ด ํ๋ผ๋ฏธํฐ ์ ๋ฌ
class ThreadData
{
public int Start { get; set; }
public int End { get; set; }
public DataResult DataResult { get; set; }
}
DataResult dr = new DataResult();
t1.Start(new ThreadData(1, 100, dr));
t2.Start(new ThreadData(101, 200, dr));
static async Task<int> TotalInteger(int s, int e)
{
await Task.Delay(1000);
return await Task.Run(() => {
int sum = 0;
for (int i = s; i <= e; i++)
sum += i;
return sum;
});
}
Task<int> t1 = TotalInteger(1, 10);
await t1; // ๋๋ Task.WaitAll(t1);
int sum = 0;
object key = new object();
Task[] tasks = new Task[10];
for (int i = 0; i < 10; ++i)
{
tasks[i] = Task.Run(() => {
lock (key) {
sum += j;
}
});
}
Task.WaitAll(tasks);
// ๊ฐ๋ณ Task ๋๊ธฐ
t1.Wait();
// ์ฌ๋ฌ Task ๋์ ๋๊ธฐ
Task.WaitAll(t1, t2, t3);
Task waitTask = Task.WhenAll(t1, t2);
static class MyClass
{
public static void Print<T>(this IEnumerable<T> cont)
{
foreach (var item in cont)
Console.Write($"{item} ");
Console.WriteLine();
}
}
// LINQ ์ฌ์ฉ
IEnumerable<int> subset = Enumerable.Range(1, 100);
subset.Where(v => v % 5 == 0)
.OrderByDescending(v => v)
.Select(v => v + 20)
.Print();
Action f1 = () => { Console.WriteLine("Hello f1()"); };
Func<int, int, int> f3 = (a, b) => a + b;
// LINQ์์์ ๋๋ค
arr.Where(v => v % 2 == 0);
// var ํค์๋
var value = 100;
// ์ต๋ช
ํ์
var obj = new { A = 10, B = "Hello" };
// Skip๊ณผ Take
var subset = arr.Skip(5).Take(3); // 5๊ฐ ๊ฑด๋๋ฐ๊ณ 3๊ฐ ์ ํ
// Where์ Select
var query = arr.Where(x => x % 2 == 0) // ์กฐ๊ฑด ํํฐ๋ง
.Select(x => x * 2); // ๋ฐ์ดํฐ ๋ณํ
// ์ง๊ณ ํจ์
int count = arr.Count();
int max = arr.Max();
int min = arr.Min();
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Phone { get; set; }
}
// ๊ฐ์ฒด ์ปฌ๋ ์
์ฟผ๋ฆฌ
var result = lt.Where(person => person.Name.Contains("๊ธธ"))
.Select(person => new {
Index = index++,
Age = person.Age
});