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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 type CLS_DataSources = class(TDictionary<String, CLS_DataSource>)
//  Class Body
  end;
2/ Une classe Projects
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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;
et SortDictionaryKeys :
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;
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