是否可以在dart中创建一个String扩展名'isEmptyOrders'?

gwo2fgha  于 2023-11-14  发布在  其他
关注(0)|答案(4)|浏览(93)

首先,让我们为这个扩展定义一些标准:
1.如果对象为null或空字符串,则应返回true。
1.我应该可以在一个链接的可空对象上使用它。
1.在使用扩展名时,我不应该使用括号、类型转换或== true
下面是一个应该工作的例子:

extension StringExtension on String? {
  bool get isEmptyOrNull {
  // Implementation
  }
}

class MyObject {
  MyObject({this.myString});

  final String? str;
}

// somewhere in the code: 

final MyObject? obj = null;
if(obj?.str.isEmptyOrNull){
  print('object was empty string or had the value null');
}

字符串
如果这段代码能够编译,遵循所有的标准,并写出正确的输出,我就认为解决方案是正确的。

nukf8bse

nukf8bse1#

我试着根据所有的标准写代码,结果是这样的

extension StringExtension on String? {
  bool get isNull => this == null;

  bool get isEmptyOrNull => isNull || this!.isEmpty;
}

class MyObject {
  MyObject({this.str});

  final String? str;
}

// somewhere in the code:

void main() {
  const MyObject? objNull = null;
  final MyObject objStrNull = MyObject();
  final MyObject objStrEmpty = MyObject(str: '');
  final MyObject objStrNotEmpty = MyObject(str: 'str');

  print(objNull?.str.isEmptyOrNull); // null
  print((objNull?.str).isEmptyOrNull); // true
  print(objStrNull.str.isEmptyOrNull); // true
  print(objStrEmpty.str.isEmptyOrNull); // true
  print(objStrNotEmpty.str.isEmptyOrNull); // false
}

字符串
但是如果没有带null对象的圆括号,它将产生null而不是布尔值

6vl6ewon

6vl6ewon2#

是的,可以在Dart中创建字符串扩展名isEmptyOrNull。“

extension StringExtensions on String {
  bool get isNullOrEmpty => this == null || isEmpty;
}

字符串
要使用扩展,只需对任何字符串变量调用isNullOrEmpty方法即可。例如:

String myString = '';

if (myString.isNullOrEmpty) {
  // The string is null or empty
} else {
  // The string is not null or empty
}

pftdvrlh

pftdvrlh3#

这个方法怎么样?

extension StringExtension on String? {
   bool get isEmptyOrNull => this?.isEmpty ?? true;
}

class MyObject {
   MyObject({this.myString});

   final String? str;
}

// somewhere in the code:

final MyObject? obj = null;
if (obj?.str.isEmptyOrNull) {
   print('Object was empty string or had the value null');
}

字符串

hsgswve4

hsgswve44#

operatot ?.是一个条件成员访问运算符。
条件成员存取运算子只有在算子评估为非Null时,才会将成员存取(?.)作业套用至其算子;否则,它会传回null。即:
如果a的评估结果为null,则a?.x的结果为null
如果a的计算结果为非空,则a?.x的结果与a.x的结果相同。

这样,您的代码将永远无法编译。

final MyObject? obj = null;
if(obj?.str.isEmptyOrNull){
  print('object was empty string or had the value null');
}

字符串

相关问题