반응형
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
namespace ConsoleApp1
{
internal static class Program
{
private static void Main()
{
List<byte> a = new List<byte> { 2, 5 };
a.Reverse();
Console.WriteLine(a[0]);
byte[] b = new byte[] { 2, 5 };
b.Reverse();
Console.WriteLine(b[0]);
}
}
}
위 프로그램을 실행시키면
5
2
를 출력한다.
List.Reverse는 파괴적 함수이지만 IEnumerable.Reverse는 비파괴적 함수로서 새로운 IEnumerable을 반환하기 때문이다.
따라서 .Reverse() 메소드를 사용할 때는 내가 원하는 것이 파괴적 함수인지 비파괴적 함수인지 명확히 구별해야 한다. 또한 변수의 타입을 바꿀 때에도 바꾸기 전과 다르게 동작하는 메소드 또는 확장 메소드가 있는지 확인해야 한다.
확장 메소드를 다른 클래스의 기본 메소드와 동일한 이름으로 명명하는 것은 언어의 안정성에서 그리 좋지 못한 것 같다.Linq Reverse를 GetReverse로 하거나 List Reverse를 ReverseThis로 했으면 어땠을까.
반응형
'C#' 카테고리의 다른 글
Choosing Between Class and Struct (0) | 2024.12.24 |
---|---|
explicit interface implementation (0) | 2024.12.24 |
public 대신 internal을 사용할 수 있다면 internal을 쓰자. (0) | 2024.12.21 |
C# .NET Framework 4.8 프로젝트에서 SQLite 사용하는 방법 (0) | 2024.11.12 |
csc로 라이브러리 만들기 (0) | 2022.12.09 |