使用"as"运算符强制转换 Nil TJSONValue 时出错



我遇到了一个让我大吃一惊的错误,所以我想和你核实一下这是否有意义。。。

Item := Songs.Items[Index] as TJSONObject;
ThisTrack := Item.Values['track'] as TJSONObject;
if (Assigned(ThisTrack)) then Begin;
End; 

SongsTJSONArrayItemThisTrackTJSONObject

如果CCD_ 6不包含"0";轨道";,上面的代码在第2行抛出一个CCD_ 7异常。

这是我第一次看到这个,我很确定,我有";NIL AS<某事>quot;过去有很多。

这是特定于JSON类的问题吗?

解决方法真的如下吗?

ThisTrack: TJSONValue;
Item := Songs.Items[Index] as TJSONObject;
ThisTrack := Item.Values['track'];
If Assigned(ThisTrack) then Begin;
Tracks := (ThisTrack as TJSONObject).Values['uri'].Value);

如果找不到请求的子级,TJSONObject.Values[]属性将返回一个nil指针。

如果给定nil指针,则as运算符不会引发异常,它将返回nil指针。因此,无论是否强制转换,在访问可能存在或不存在的对象之前,仍然需要检查nil

关于ERangeError异常,您无法在Item.Values['track'] as TJSONObject表达式上得到该错误,正如您所指出的那样。但是,如果Index超出了界限,则可以从Songs.Items[Index]表达式中获得它。

此外,您在Begin之后有一个错误的;,您需要删除它。

相关内容

  • 没有找到相关文章