function générique exploitant un TDictionary à éléments classe propriétaire
Bonjour,
Je suis bien en mal de définir le prototype de ma fonction générique de classe pour l'exploitation de TDictionary qui ont des types d'éléments différents.
1/ Une classe DataSources :
Code:
1 2 3
| type CLS_DataSources = class(TDictionary<String, CLS_DataSource>)
// Class Body
end; |
2/ Une classe Projects
Code:
1 2 3
| type CLS_Projects = class(TDictionary<String, CLS_Project>)
// Class Body
end; |
3/ Les classes éléments (celles qui sont au singulier : sans le S à la fin du nom) : CLS_DataSource & CLS_Project
contiennent toutes la propriété "Name".
L'objectif :
Ecrire une fonction de type
class function TUtils.ListToDisplay
qui quelque soit le TDictionary passé en paramètre sortira une string avec la concaténation des noms (issus de la propriété Name)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class function TUtils.ListToDisplay<TKey,TValue>(Dict: TEnumerable<TPair<TKey,TValue>>): String;
var
ItemName: String;
Sep: String;
begin
Result := '';
Sep := '';
for ItemName in SortDictionaryKeys(Dict) do
begin
Result := Result + Sep + Dict[ItemName].Name;
Sep := ' , ';
end;
end; |
et SortDictionaryKeys :
Code:
1 2 3 4 5 6
|
function SortDictionaryKeys(Keys: TEnumerable<String>): TArray<String>;
begin
Result := Keys.ToArray;
TArray.Sort<String>(Result);
end; |
le compilo dit :
E2010 Types incompatibles : 'System.Generics.Collections.TEnumerable<System.string>' et 'System.Generics.Collections.TEnumerable<System.Generics.Collections.TPair<MOD_3LS_Unit.TUtils.ListToDisplay.TKey,MOD_3LS_Unit.TUtils.ListToDisplay.TValue>>'
(sur la ligne du for ItemName in SortDictionaryKeys(Dict) do)
Mais le plus problématique est :
E2149 La classe n'a pas de propriété par défaut
(sur la ligne Result := Result + Sep + Dict[ItemName].Name;)
Ce que je comprends;
Mais je ne vois pas comment solutionner ces 2 problèmes
Une idée ?
Merci