1

鉴于以下两行代码产生相同的输出,这两种方法中哪一种更好?

TJSONArray *resultsArray = (TJSONArray*) response->Get("results")->JsonValue;

TJSONArray *resultsArray = (TJSONArray*) response->GetValue("results");
4

1 回答 1

1

GetValue()在功能上与调用相同Get()->JsonValue,但需要额外检查以确保在访问其JsonValue.

TJSONObject有一个受保护的GetPairByName()方法,如果找到或未找到该键,则返回指向TJSONPair所请求键的对象的指针NULL

Get()只需按原样调用GetPairByName()并返回指针:

function TJSONObject.Get(const Name: string): TJSONPair;
begin
  Result := GetPairByName(Name);
end;

如果您确定密钥存在,则使用Get()->JsonValue是非常安全的。但是,如果密钥可能不存在,则需要NULL在访问任何TJSONPair成员之前检查返回值。

GetValue()仅当找到键时才调用GetPairByName()并返回返回的JsonValueTJSONPair否则返回NULL

function TJSONObject.GetValue(const Name: string): TJSONValue;
var
  LPair: TJSONPair;
begin
  LPair := GetPairByName(Name);
  if LPair <> nil then
    Result := LPair.JSONValue
  else
    Result := nil;
end;

如果密钥可能不存在,则调用GetValue()而不是Get()->JsonValue.

于 2018-03-19T18:20:01.737 回答