code exchange for this question as a reference: Delphi TPair Exception
How can I get the key and value from a specific TObjectDictionary entry without using TPair and without retrieving / removing / removing a pair from the list?
{$APPTYPE CONSOLE} uses SysUtils, Generics.Defaults, Generics.Collections; type TProduct = class private FName: string; procedure SetName(const Value: string); published public property Name: string read FName write SetName; end; type TListOfProducts = TObjectDictionary<TProduct, Integer>; { TProduct } procedure TProduct.SetName(const Value: string); begin FName := Value; end; var MyDict: TListOfProducts; MyProduct1: TProduct; MyProduct2: TProduct; MyProduct3: TProduct; APair: TPair<TProduct, Integer>; aKey: string; begin try MyDict := TListOfProducts.Create([doOwnsKeys]); MyProduct1 := TProduct.Create; MyProduct1.Name := 'P1'; MyProduct2 := TProduct.Create; MyProduct2.Name := 'P2'; MyProduct3 := TProduct.Create; MyProduct3.Name := 'P3'; MyDict.Add(MyProduct1, 1); MyDict.Add(MyProduct2, 2); MyDict.Add(MyProduct3, 3);
Thanks.
===========================
= Answer Code =
{$APPTYPE CONSOLE} uses SysUtils, Generics.Defaults, Generics.Collections; type TProduct = class private FName: string; procedure SetName(const Value: string); published public property Name: string read FName write SetName; end; type TListOfProducts = TObjectDictionary<TProduct, Integer>; { TProduct } procedure TProduct.SetName(const Value: string); begin FName := Value; end; var MyDict: TListOfProducts; MyProduct1: TProduct; MyProduct2: TProduct; MyProduct3: TProduct; MySearchedProduct: TProduct; // From Answer. APair: TPair<TProduct, Integer>; aProductName: string; begin try MyDict := TListOfProducts.Create([doOwnsKeys]); MyProduct1 := TProduct.Create; MyProduct1.Name := 'P1'; MyProduct2 := TProduct.Create; MyProduct2.Name := 'P2'; MyProduct3 := TProduct.Create; MyProduct3.Name := 'P3'; MyDict.Add(MyProduct1, 1); MyDict.Add(MyProduct2, 2); MyDict.Add(MyProduct3, 3); Writeln('Enter the Product Name to search: '); //the code to look for a **concrete product** goes here.. Readln(aProductName); for MySearchedProduct in Mydict.Keys do if (MySearchedProduct.Name = aProductName) then break; if MySearchedProduct.Name = aProductName then WriteLn('I have found the product: ' + MySearchedProduct.Name) else WriteLn('I have not found a product with that name.'); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
source share