나는 여기에있는 누군가가 내가 생각하는 것보다 쉽게 해결할 것이라고 확신한다. 이름과 전화 번호가있는 목록이 있습니다. 이름은 필수이며 중복 될 수 있으며 숫자는 하나 일 수 있지만 필수는 아닙니다..NET 내에서 다른 funcationality를 변경하는 방법?
|name|number|
|A |2 |
|A | |
|B | |
|C | |
|C | |
|D |4 |
-------------
현재로서는 이름 부분에 list.Distinct()를 수행하고 있지만 숫자 섹션은 신경 쓰지 않습니다.
newlist = oldlist.Distinct().ToList();
복제 된 하나의 이름에 번호가있는 경우 해당 번호와 함께 번호를 유지하고 싶습니다. 두 개의 동일한 이름과 두 개의 다른 숫자의 경우는 발생하지 않습니다. 어떤 아이디어?
한 가지 더 :이 시점에서 나는 별개의 것이므로 신경 쓰지 않는다.
나는 StackOverflow에 팀의 더 나은 가시성을 위해 모든 코드를 추가하고 :
class _ClientComparer : IEqualityComparer<_Client>
{
#region IEqualityComparer<_Client> Members
public bool Equals(_Client x, _Client y)
{
if ((x.ClientNumber != 0) && (y.ClientNumber != 0))//Both clients with numbers
if (x.ClientNumber == y.ClientNumber)//both clients number the same then same clients.
return true;
else //if not the same they are different
return false;
else if (x.ClientName == y.ClientName)
return true;
else
return false;
}
public int GetHashCode(_Client obj)
{
if (obj.ClientNumber != 0)
return obj.ClientNumber.GetHashCode();
else
return obj.ClientName.GetHashCode();
}
을 구별를 호출 IEqualityComparer 구현을 위 아래.
public List<_Client> CollectAllClients()
{
List<_Client> ClientList = new List<_Client>();
while (this.Read())
{
if (GetClientNumber() != 0)
ClientList.Add(CreateClientInstance());
else
ClientList.AddRange(CreateClientsInstance());
}
ClientList = ClientList.Distinct<_Client>(new _ClientComparer()).ToList<_Client>() ;
return ClientList;
}
몇 가지 추가 코드를 제공 할 수 있습니다 (정확히'oldList'는 무엇이며 맞춤 클래스는 어떻게 보이는지 등). – Groo
귀하의 의견에 감사드립니다. 이 질문과 관련된 모든 코드를 추가했습니다. 도움이되는지 알려 주시기 바랍니다. – Geo