OrderBy 예제
using System.Linq;
class ExtensionMethods2
{
static void Main()
{
int[] ints = [10, 45, 15, 39, 21, 26];
var result = ints.OrderBy(g => g);
foreach (var i in result)
{
System.Console.Write(i + " ");
}
}
}
//Output: 10 15 21 26 39 45
- 확장명 메서드는 정적 메서드로 정의되지만 인스턴스 메서드 구문을 사용하여 호출.
- 첫 번째 매개 변수는 메서드가 작동하는 형식을 지정
namespace ExtensionMethods
{
public static class MyExtensions
{
public static int WordCount(this string str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
using ExtensionMethods;
string s = "Hello Extension Methods";
int i = s.WordCount();
일반적인 사용 패턴
컬렉션 기능
LINQ 쿼리를 사용하여 컬렉션을 필터링
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
레이어 관련 기능
public class DomainEntity
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
static class DomainEntityExtensions
{
static string FullName(this DomainEntity value)
=> $"{value.FirstName} {value.LastName}";
}
미리 정의된 형식 확장
this int number과 this ref int number
public static class IntExtensions
{
public static void Increment(this int number)
=> number++;
// Take note of the extra ref keyword here
public static void RefIncrement(this ref int number)
=> number++;
}
public static class IntProgram
{
public static void Test()
{
int x = 1;
// Takes x by value leading to the extension method
// Increment modifying its own copy, leaving x unchanged
x.Increment();
Console.WriteLine($"x is now {x}"); // x is now 1
// Takes x by reference leading to the extension method
// RefIncrement changing the value of x directly
x.RefIncrement();
Console.WriteLine($"x is now {x}"); // x is now 2
}
}
'C# > LINQ' 카테고리의 다른 글
표준 쿼리 연산자 : LINQ를 통한 데이터 변환(C#) (1) | 2024.01.04 |
---|---|
C# LINQ 쿼리를 작성하여 데이터 쿼리 (0) | 2024.01.01 |
쿼리 식 기본 사항 (0) | 2023.12.30 |
LINQ 쿼리 소개(C#) (0) | 2023.12.30 |