728x90
반응형
728x170
■ IEqualityComparer<T> 인터페이스를 사용해 열거 가능형에서 중복 항목을 제거하는 방법을 보여준다.
▶ Item.cs
namespace TestProject;
/// <summary>
/// 항목
/// </summary>
public class Item
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region ID - ID
/// <summary>
/// ID
/// </summary>
public int ID { get; set; }
#endregion
#region 명칭 - Name
/// <summary>
/// 명칭
/// </summary>
public string Name { get; set; }
#endregion
#region 코드 - Code
/// <summary>
/// 코드
/// </summary>
public string Code { get; set; }
#endregion
#region 가격 - Price
/// <summary>
/// 가격
/// </summary>
public int Price { get; set; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 문자열 구하기 - ToString()
/// <summary>
/// 문자열 구하기
/// </summary>
/// <returns>문자열</returns>
public override string ToString()
{
return $"ID={ID};Name={Name};Code={Code};Price={Price}";
}
#endregion
}
▶ ItemEqualityComparer.cs
namespace TestProject;
/// <summary>
/// 항목 동일성 비교자
/// </summary>
public class ItemEqualityComparer : IEqualityComparer<Item>
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 해시 코드 구하기 - GetHashCode(item)
/// <summary>
/// 해시 코드 구하기
/// </summary>
/// <param name="item">항목</param>
/// <returns>해시 코드</returns>
public int GetHashCode(Item item)
{
return item.ID.GetHashCode() ^
item.Name.GetHashCode() ^
item.Code.GetHashCode() ^
item.Price.GetHashCode();
}
#endregion
#region 동일 여부 구하기 - Equals(item1, item2)
/// <summary>
/// 동일 여부 구하기
/// </summary>
/// <param name="item1">항목 1</param>
/// <param name="item2">항목 2</param>
/// <returns>동일 여부</returns>
public bool Equals(Item item1, Item item2)
{
return item1.ID == item2.ID &&
item1.Name == item2.Name &&
item1.Code == item2.Code &&
item1.Price == item2.Price;
}
#endregion
}
▶ Program.cs
namespace TestProject;
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
List<Item> sourceList = new List<Item>();
sourceList.Add(new Item { ID = 1, Name = "항목1", Code = "CODE1", Price = 100});
sourceList.Add(new Item { ID = 1, Name = "항목1", Code = "CODE1", Price = 100});
sourceList.Add(new Item { ID = 2, Name = "항목2", Code = "CODE2", Price = 200});
sourceList.Add(new Item { ID = 2, Name = "항목2", Code = "CODE2", Price = 200});
sourceList.Add(new Item { ID = 3, Name = "항목3", Code = "CODE3", Price = 300});
IEnumerable<Item> resultEnumerable = sourceList.Distinct(new ItemEqualityComparer());
foreach(Item item in resultEnumerable)
{
Console.WriteLine(item);
}
}
#endregion
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON/.NET6] Regex 클래스 : Replace 정적 메소드를 사용해 공백 문자 제거하기 (0) | 2022.10.14 |
---|---|
[C#/COMMON/.NET6] DateTime 구조체 : 밀리초 정밀도 포맷 문자열 사용하기 (0) | 2022.10.14 |
[C#/COMMON/.NET6] 2의 거듭 제곱 여부 구하기 (0) | 2022.10.14 |
[C#/COMMON/.NET6] IEnumerable<T> 인터페이스 : 열거 가능형에서 중복 항목 제거하기 (0) | 2022.10.13 |
[C#/COMMON/.NET6] object 클래스 : GetHashCode/Equals 메소드를 사용해 열거 가능형에서 중복 항목 제거하기 (0) | 2022.10.12 |
[C#/COMMON/.NET6] IEnumerable<T> 인터페이스 : 열거 가능형 임의로 섞기 (0) | 2022.10.12 |
[C#/COMMON/.NET6] List<T> 클래스 : 리스트 임의로 섞기 (0) | 2022.10.12 |
[C#/COMMON/.NET6] IEnumerable<T> 인터페이스 : 열거 가능형 임의로 섞기 (0) | 2022.10.12 |
[C#/COMMON/.NET6] IList<T> 인터페이스 : 리스트 임의로 섞기 (0) | 2022.10.12 |
[C#/COMMON/.NET6] DataTable 클래스 : ImportRow 메소드를 사용해 DataRow 객체 가져오기 (0) | 2022.10.10 |
댓글을 달아 주세요