AKTUALIZACJA: Powinienem był wspomnieć w oryginalnym poście, że chcę dowiedzieć się więcej o generycznych tutaj. Mam świadomość, że można to zrobić, modyfikując klasę podstawową lub tworząc interfejs, który implementują obie klasy dokumentów. Jednak w trosce o to ćwiczenie interesują mnie rozwiązania, które nie wymagają modyfikacji klas dokumentów ani ich klasy bazowej. Sądziłem, że fakt, że to pytanie dotyczy metod rozszerzenia, oznaczałby to.Jak zmienić te ogólne metody?
Napisałem dwie prawie identyczne ogólne metody rozszerzenia i próbuję ustalić, w jaki sposób mogę je przekształcić w jedną metodę. Różnią się tylko tym, że działają na liście, a inne na liście, a właściwości, które mnie interesują, to AssetID dla AssetDocument i PersonID dla PersonDocument. Chociaż AssetDocument i PersonDocument mają tę samą klasę podstawową, właściwości są zdefiniowane w każdej klasie, więc nie sądzę, że to pomaga. Próbowałem
public static string ToCSVList<T>(this T list) where T : List<PersonDocument>, List<AssetDocument>
myślenia I może być w stanie przetestować rodzaj i podjąć odpowiednie działania, ale to powoduje błąd składni
Typ parametru „T” dziedziczy sprzeczne ograniczenia
Są to metody, które chciałbym przekształcić w jedną metodę, ale być może po prostu odchodzę za burtę i najlepiej byłoby pozostawić takie, jakie są. Chciałbym usłyszeć, co myślisz.
public static string ToCSVList<T>(this T list) where T : List<AssetDocument>
{
var sb = new StringBuilder(list.Count * 36 + list.Count);
string delimiter = String.Empty;
foreach (var document in list)
{
sb.Append(delimiter + document.AssetID.ToString());
delimiter = ",";
}
return sb.ToString();
}
public static string ToCSVList<T>(this T list) where T : List<PersonDocument>
{
var sb = new StringBuilder(list.Count * 36 + list.Count);
string delimiter = String.Empty;
foreach (var document in list)
{
sb.Append(delimiter + document.PersonID.ToString());
delimiter = ",";
}
return sb.ToString();
}
zrobić AssetDocument i PersonDocument pochodzą ze wspólnej klasy bazowej/interfejsu? – Preets