Grundsätzlich Ihr Ansatz falsch ist, wäre ideal Weg, um eine richtige Modell betrachten werden, um die Daten zu halten, die dann gebunden werden können an die Ui-Kontrolle. Sie können dann IEquatable<T>
implementieren, um Equals
und GetHashCode
zu überschreiben, wodurch Datenduplikation vermieden wird, wenn sie zu einer Sammlung HashSet
hinzugefügt werden oder während des manuellen Vergleichs.
wäre mein Ansatz verfolgt nun:
- die Datenmodelle erstellen wie folgt:
// Employee
Modell SalaryDetail
Aggregate implementiert IEquatable<Employee>
die Equals
und GetHashCode
außer Kraft zu setzen, ein einzigartiges Objekt zu erstellen, derzeit tut es auf Basis von Name
, aber mehr Elemente von SalaryDetail
können hinzugefügt werden
public class Employee : IEquatable<Employee>
{
public string Name { get; set;}
public SalaryDetail Salary { get; set;}
public bool Equals(Employee other)
{
return other != null &&
Name == other.Name;
}
public override bool Equals(object other)
{
return Equals(other as Employee);
}
public override int GetHashCode()
{
return (Name.GetHashCode() * 31);
}
}
// SalaryDetail Modell
public class SalaryDetail
{
public double BasicAmount { get; set;}
public double HouseRent { get; set;}
public double MedicalAllowance { get; set;}
public double TotalHouseRent { get; set;}
public double TotalMedicalAllowance { get; set;}
public double TotalSalary { get; set;}
}
// Hier nun wird der Code, wenn Sie einen neuen Mitarbeiter hinzufügen versuchen:
Employee employee = new Employee();
employee.Name = // Fill Employee Name;
employee.Salary = new SalaryDetail();
// Fill various Salary components like Rent, Allowances and their calculation
Jetzt können Sie entweder Objekt Hinzufügen der Mitarbeiter berücksichtigen zu eine Auflistung vom Typ HashTable<Employee>
, die automatisch dafür sorgt, dass nur eindeutige Objekte hinzugefügt werden, da die überschriebene Methode Equals
von IEquatable<Employee>
aufgerufen wird, dann können Sie die Hashtable
derzuweisen, da gibt es nie doppelt Mitarbeiter
Eine andere Option wäre, Sie können es auf die List<Employee>
, aber vor der Zugabe können Sie überprüfen, ob das Objekt bereits existiert oder nicht, gibt es mehrere Möglichkeiten, wäre ein einfacher Code mit Find
oder Any
:
List<Employee> testList = new List<Employee>();
// mit Find
var existingEmployee = testList.Find (e => e.Equals (NewEmployeeObject))
// Wenn das Ergebnis (existingEmployee
) null ist, dann das Objekt hinzufügen, sonst die Mitarbeiter bereits vorhanden sind, Verfahren der Logik entsprechend
Oder
// Mit Any
(erfordert System.Linq
)
var isEmployeeExisting = testList.Any(e => e.Equals(NewEmployeeObject))
// Wenn das Ergebnis (isEmployeeExisting
) wahr ist, dann das Objekt hinzufügen, sonst die Mitarbeiter bereits vorhanden ist, Verfahren der Logik entsprechend
Verwenden Sie HashSet. http://stackoverflow.com/q/4558754/3956100 – Niklas