Dart中如何根据布尔表达式选择给不同变量赋值的简洁写法?
Dart条件选择变量赋值的简洁实现方案
Dart 本身不支持将三元表达式直接作为左值进行赋值,因为 Dart 中的三元表达式返回的是变量存储的值,而非变量本身的可写引用,所以你尝试的 (sendToFirst ? first : second) = value 写法无法正常运行。
最简洁的可行实现
直接将赋值逻辑放到三元表达式的两个分支即可,写法和你期望的效果几乎一致:
sendToFirst ? first = value : second = value;
完整的运行示例如下:
void main() { String value = 'Hello World!'; bool sendToFirst = false; String first = ''; String second = ''; // 替换原if-else块的简洁写法 sendToFirst ? first = value : second = value; print('first: $first'); // 输出空字符串 print('second: $second'); // 输出 Hello World! }
这种写法没有额外性能开销,也完全符合 Dart 的语法规范,是生产环境最常用的实现方式。
其他可选方案(不推荐日常使用)
如果你需要操作的是类的成员变量,也可以通过反射实现动态赋值,但 Dart 的反射机制开销较高,且 Flutter 框架默认禁用反射,仅在特殊场景下可以考虑使用。
内容的提问来源于stack exchange,提问作者Arkay
相关产品推荐
相关产品推荐

