访问列表索引的安全方法

Nat*_*ouy 9 dart

我是 Dart 新手。

我很难找到一种易于阅读的方法来“安全”访问任何索引处的列表元素

final List<String> myList = <String>[]
myList.add("something")
// ...
String myGetter(int index) {
  // "heavy" way
  if (index < myList.length) {
    return myList[index]
  }

  return null;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用常规[index]elementAt(index)并且索引超出边界,它会抛出RandeError

有没有一种方法在无法到达索引时返回 null?

抱歉,如果重复发布,但我试图找到信息但没有成功,+不确定是否有(非)官方的松弛/不和谐来提出这种“简单”的问题

lrn*_*lrn 10

Dart 列表不允许无效索引。尝试时没有内置方法可以获取 a null。不在平台库中。

您可以创建自己的辅助函数(就像您已经做的那样):

T? tryGet<T>(List<T> list, int index) => 
    index < 0 || index >= list.length ? null : list[index];
Run Code Online (Sandbox Code Playgroud)

(记得也要检查负索引)。

按照建议,您还可以将其添加为扩展方法:

extension ListGetExtension<T> on List<T> {
  T? tryGet(int index) =>
    index < 0 || index >= this.length ? null : this[index];
}
Run Code Online (Sandbox Code Playgroud)

这可能会让合作变得更加愉快。

(我建议不要做一些坏事然后捕获错误,至少当您可以轻松地预先检查它是否坏时)。