[C#/COMMON/.NET6] object 클래스 : GetHashCode/Equals 메소드를 사용해 열거 가능형에서 중복 항목 제거하기
C#/Common 2022. 10. 12. 19:49728x90
728x170
■ object 클래스의 GetHashCode/Equals 메소드를 사용해 열거 가능형에서 중복 항목을 제거하는 방법을 보여준다.
▶ 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 해시 코드 구하기 - GetHashCode()
/// <summary>
/// 해시 코드 구하기
/// </summary>
/// <returns>해시 코드</returns>
public override int GetHashCode()
{
return $"{ID}|{Name}|{Code}|{Price}".GetHashCode();
}
#endregion
#region 동일 여부 구하기 - Equals(source)
/// <summary>
/// 동일 여부 구하기
/// </summary>
/// <param name="source">소스 객체</param>
/// <returns>동일 여부</returns>
public override bool Equals(object source)
{
if(!(source is Item))
{
return false;
}
Item sourceItem = (Item)source;
return sourceItem.ID == ID &&
sourceItem.Name == Name &&
sourceItem.Code == Code &&
sourceItem.Price == Price;
}
#endregion
#region 문자열 구하기 - ToString()
/// <summary>
/// 문자열 구하기
/// </summary>
/// <returns>문자열</returns>
public override string ToString()
{
return $"ID={ID};Name={Name};Code={Code};Price={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();
foreach(Item item in resultEnumerable)
{
Console.WriteLine(item);
}
}
#endregion
}
728x90
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON/.NET6] Char 구조체 : IsWhiteSpace 정적 메소드를 사용해 공백 문자 제거하기 (0) | 2022.10.14 |
---|---|
[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] IEqualityComparer<T> 인터페이스 : 열거 가능형에서 중복 항목 제거하기 (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 |