C#/LINQ

확장명 메서드

소나무꼴 2024. 1. 3. 23:54

https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

 

 

 


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