我有一个存储一些键值对的函数,当我迭代它们时,我得到这个错误两次: dcc32 error App.pas(137):E2149类没有默认属性。下面是我的代码的一部分:
function BuildString: string;
var
i: Integer;
requestContent: TDictionary<string, string>;
request: TStringBuilder;
begin
requestContent := TDictionary<string, string>.Create();
try
// add some key-value pairs
request := TStringBuilder.Create;
try
for i := 0 to requestContent.Count - 1 do
begin
// here I get the errors
request.Append(requestContent.Keys[i] + '=' +
TIdURI.URLEncode(requestContent.Values[i]) + '&');
end;
Result := request.ToString;
Result := Result.Substring(0, Result.Length - 1); //remove the last '&'
finally
request.Free;
end;
finally
requestContent.Free;
end;
end;我需要从字典中的每个条目中收集信息。我怎么才能修复它?
发布于 2014-09-29 20:32:42
字典类的Keys和Values属性分别属于TDictionary<string, string>.TKeyCollection和TDictionary<string, string>.TValueCollection类型。这些类是从TEnumerable<T>派生的,不能通过索引进行迭代。但是,您可以在Keys上迭代,或者实际上在Values上迭代,这样做后一种方法对您没有多大用处。
如果您在Keys上迭代,您的代码可能如下所示:
var
Key: string;
....
for Key in requestContent.Keys do
request.Append(Key + '=' + TIdURI.URLEncode(requestContent[Key]) + '&');然而,这是低效的。因为您知道需要键和匹配值,所以可以使用字典的迭代器:
var
Item: TPair<string, string>;
....
for Item in requestContent do
request.Append(Item.Key + '=' + TIdURI.URLEncode(Item.Value) + '&');成对迭代器比上面的第一个变种更有效。这是因为实现细节意味着配对迭代器能够在以下情况下迭代字典:
and
https://stackoverflow.com/questions/26099848
复制相似问题