いつも参考にさせていただいております。鈴木です。
TDictionaryについて教えてください。
次のようなコード(コンソールプログラム)を書いてみました。
Delphi 10.2 tokyo Update 1を使用しています。
--------------------------
uses
System.SysUtils, System.Generics.Collections;
type
TMyRcd = record
fInt: Integer;
procedure SetInt(Val: Integer);
end;
TMyRcds = class( TDictionary<String,TMyRcd> )
end;
var
rcd: TMyRcd;
rcds: TMyRcds;
{ TMyRcd }
procedure TMyRcd.SetInt(Val: Integer);
begin
fInt := Val;
end;
begin
rcds := TMyRcds.Create();
rcd.fInt := 100;
rcds.Add( 'Key1',rcd );
Writeln( Format( 'Key1:%d',[rcds.Items['Key1'].fInt] ) );
// Key1で参照できるレコード型のフィールドの値を変えたい。
// コンパイルエラー。プロパティの所為?
// rcds.Items['Key1'].fInt := 300;
// ※1
rcds.Items['Key1'].SetInt( 300 );
// ※2 変わらない...
Writeln( Format( 'Key1:%d',[rcds.Items['Key1'].fInt] ) );
rcds.Free;
Readln;
end.
----------------------------
デバッガで確認したところ、上記の※1では正しく動作しているように思うのですが、※2の行を実行しても「100」が表示されてしまい、変更したはずの「300」が表示されません。
基本的なTDictionaryの使い方が間違っているのでしょうか。
何かおわかりでしたら、教えてください。
よろしくお願いいたします。
鈴木
MLホームページ:
http://www.freeml.com/delphi-users
----------------------------------------------------------------------
☆CM放映で今話題☆ 顔から足先までぜ~~~んぶ全身脱毛!!
スリムアップ全身脱毛33か所 月額9,500円(税抜)の初回分が無料!!!!
予約がとりやすいから夏までに間に合う♪♪
◆無料カウンセリングでご来店の方!今ならハンド脱毛体験無料実施中◆
http://ad.freeml.com/cgi-bin/sa.cgi?id=qpAId
------------------------------------------------------[freeml byGMO]--
あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
http://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------