seit einigen Stunden bin ich schon dabei eine Lösung für einen Funktionsaufruf von einem Template (Generic) objekt ausgehend. Leider bekomme ich dabei den Fehler:
"TList enthält keine Funktion update"
Der zugrundeliegende Code sieht folgendermaßen aus:
Das Hauptprogramm ist:
MySQLDataList<CompanyList> companies = new MySQLDataList<CompanyList>();
companies.createEmptyObject();
companies.getDataList().data.Add(new Company { ID = 1, NAME = "Firma 1" });
companies.getDataList().data.Add(new Company { ID = 2, NAME = "Firma 2" });
companies.getDataList().data.Add(new Company { ID = 3, NAME = "Firma 3" });
companies.getDataList().data.Add(new Company { ID = 4, NAME = "Firma 4" });
CompanyList companyList = companies.getDataList();
CompanyList tempCompany = new CompanyList();
tempCompany.data.Add(new Company { ID = 2, NAME = "Firma 5" });
companies.update(tempCompany);
und die Klasse CompanyList ist:
class CompanyList
{
public CompanyList()
{
data = new List<Company>();
}
public List<Company> data { get; set; }
public void update(CompanyList a_companyList)
{
for (int i = 0; i < a_companyList.data.Count; i++)
{
update(a_companyList.data[i]);
}
}
/**
* \brief Update eines Datensatzes.
* \param[in] Datensatz der geupdated werden soll.
*/
public void update(Company a_company)
{
for (int i = 0; i < data.Count; i++)
{
if (data[i].ID == a_company.ID)
{
data[i].NAME = a_company.NAME;
}
}
}
}
public class Company
{
public int ID { get; set; }
public string NAME { get; set; }
}
und schließlich die Klasse MySQLDataList:
class MySQLDataList<TList>
{
public MySQLDataList()
{
}
public void update(TList a_dataList)
{
m_dataList.update(a_dataList);
}
public void createEmptyObject()
{
m_dataList = new JavaScriptSerializer().Deserialize<TList>("{\"data\":[]}");
}
public TList getDataList()
{
return m_dataList;
}
TList m_dataList = default(TList); //!< Liste mit Daten aus der Datenbank.
}
Probleme macht mir in dieser Klasse der Aufruf:
m_dataList.update(a_dataList);
Ich bin davon ausgegangen, da sich m_dataList in diesem Template vom Typ CompanyList ist und CompanyList die Funktion update besitzt, dass dieser Aufruf möglich wäre. Für mein TList ist sichergestellt, das jede Klasse, die für TList übergeben wird eine update-Methode enthält.
Kennt jemand eine Möglichkeit, wie ich in dem vorliegenden Programm einen gültigen Aufruf von update, ausgehend vom Objekt TList erzeugen kann? Gibt es evtl. in C# anderweitige Methoden, mit denen ich derartige generische Aufrufe realisieren kann?
Bei meiner Such bin ich bisher leider auf nichts vergleichbares gestoßen.