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 :
2/ Une classe Projects
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 type CLS_DataSources = class(TDictionary<String, CLS_DataSource>) // Class Body end;
3/ Les classes éléments (celles qui sont au singulier : sans le S à la fin du nom) : CLS_DataSource & CLS_Project
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 type CLS_Projects = class(TDictionary<String, CLS_Project>) // Class Body end;
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)
et SortDictionaryKeys :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
le compilo dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 function SortDictionaryKeys(Keys: TEnumerable<String>): TArray<String>; begin Result := Keys.ToArray; TArray.Sort<String>(Result); end;
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




Répondre avec citation






Partager