Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dart列表元素中的空感知_Dart - Fatal编程技术网

dart列表元素中的空感知

dart列表元素中的空感知,dart,Dart,我在做一个项目,想检查列表元素是否为空。范例 List<int> i = [1, 2, 3]; print(i[1]); // this prints 2 List i=[1,2,3]; 打印(i[1]);//这张照片是2张 但是,如果我想打印一个列表元素,如果它不存在,使用dart null aware打印一个默认数字,该怎么办呢。范例 List<int> i = [1, 2, 3]; print(i[10] ?? 15); // Also tried print(

我在做一个项目,想检查列表元素是否为空。范例

List<int> i = [1, 2, 3];
print(i[1]); // this prints 2
List i=[1,2,3];
打印(i[1]);//这张照片是2张
但是,如果我想打印一个列表元素,如果它不存在,使用dart null aware打印一个默认数字,该怎么办呢。范例

List<int> i = [1, 2, 3];
print(i[10] ?? 15);
// Also tried
print(i?.elementAt(10) ?? 15);
List i=[1,2,3];
打印(i[10]?15);
//也试过
打印(i?元素在(10)??15);
我希望它打印出15,因为索引10处的元素不存在。不幸的是,上面的代码给了我一个错误


如何检查列表元素是否不存在并返回一个默认值

正如您所尝试的那样,没有一种优雅的方法可以做到这一点您必须首先检查列表长度,因为在程序计算
i.elementAt(10)
时,它会立即抛出RangeError异常

示例解决方案1:

if (i.length > 9) { 
    print(i?.elementAt(10));
} else {
    print(15);
}
示例解决方案2(更优雅的方式):


具有此类功能的一个解决方案是使用一个自定义类包装列表,该类捕获内部异常并返回null

我写了这个包装器并称之为XList:

class XList<E> {
  List<E> list;
  XList(this.list);
  E operator [](int position) {
    try {
      return list[position];
    } catch(IndexOutOfBoundException) {
      return null;
    }
  }
}
class XList<E> {
  List<E> list;
  XList(this.list);
  E operator [](int position) {
    try {
      return list[position];
    } catch(IndexOutOfBoundException) {
      return null;
    }
  }
}
final list = [1, 2, 3];
final a = XList(list);
print(a[10] ?? 15);
// prints 15