// *** before: ***
var
List: TObjectList<TPerson>;
Dict: TDictionary<string, TArray<Integer>>;
Count: Integer;
begin
List := TObjectList<TPerson>.Create; // the long type name twice
Dict := TDictionary<string, TArray<Integer>>.Create;
Count := List.Count;
end;
// *** in version 10.3: ***
begin
var List := TObjectList<TPerson>.Create;
var Dict := TDictionary<string, TArray<Integer>>.Create;
var Count := List.Count; // Integer
var Name := 'Anna'; // string
var Ratio := 1 / 3; // Extended, not Integer
// the type comes from the expression, so there is nothing to keep in
// sync when the function on the right changes its result type.
// Watch the literals: var X := 1; is an Integer, and
// var X: Double := 1; is what you meant if you wanted a Double
end;