Codeunit 708 Dictionary Wrapper, source in 29
Source29
src/Layers/W1/BaseApp/DictionaryWrapper.Codeunit.al136 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace System.Utilities;
using System;
codeunit 708 "Dictionary Wrapper"
{
trigger OnRun()
begin
end;
var
Dictionary: DotNet GenericDictionary2;
KeysArray: DotNet Array;
DictionaryInitialized: Boolean;
KeysArrayInitialized: Boolean;
procedure TryGetValue("Key": Variant; var Value: Variant): Boolean
var
Found: Boolean;
begin
InitializeDictionary();
SYSTEM.Clear(Value);
if not Dictionary.ContainsKey(Key) then
exit(false);
Found := Dictionary.TryGetValue(Key, Value);
exit(Found);
end;
procedure TryGetKey(Index: Integer; var "Key": Variant): Boolean
var
"Count": Integer;
begin
InitializeDictionary();
InitializeKeysArray();
SYSTEM.Clear(Key);
Count := Dictionary.Count();
if (Index >= Count) or (Index < 0) then
exit(false);
Key := KeysArray.GetValue(Index);
exit(true);
end;
procedure TryGetKeyValue(Index: Integer; var "Key": Variant; var Value: Variant): Boolean
begin
if TryGetKey(Index, Key) then
if TryGetValue(Key, Value) then
exit(true);
exit(false);
end;
procedure ContainsKey("Key": Variant): Boolean
begin
InitializeDictionary();
exit(Dictionary.ContainsKey(Key));
end;
procedure "Count"(): Integer
begin
InitializeDictionary();
exit(Dictionary.Count);
end;
procedure Set("Key": Variant; Value: Variant)
begin
InitializeDictionary();
if not Dictionary.ContainsKey(Key) then begin
KeysArrayInitialized := false;
Dictionary.Add(Key, Value);
exit;
end;
Dictionary.Remove(Key);
Dictionary.Add(Key, Value);
end;
procedure Remove("Key": Variant)
begin
InitializeDictionary();
if Dictionary.ContainsKey(Key) then begin
KeysArrayInitialized := false;
Dictionary.Remove(Key);
end;
end;
procedure Clear()
begin
InitializeDictionary();
KeysArrayInitialized := false;
Dictionary.Clear();
end;
local procedure InitializeDictionary()
begin
if DictionaryInitialized then
exit;
Dictionary := Dictionary.Dictionary();
DictionaryInitialized := true;
KeysArrayInitialized := false;
end;
local procedure InitializeKeysArray()
var
KeyCollection: DotNet GenericDictionary2_KeyCollection;
"Object": DotNet Object;
"Count": Integer;
begin
if KeysArrayInitialized then
exit;
Count := Dictionary.Count();
KeysArray := KeysArray.CreateInstance(GetDotNetType(Object), Count);
KeyCollection := Dictionary.Keys;
KeyCollection.CopyTo(KeysArray, 0);
KeysArrayInitialized := true;
end;
}