颤振中的`nameof`运算符

kem*_*sky 13 dart flutter

nameofC#中有运算符,它允许在编译时获取属性名称:

var name = nameof(User.email);
Console.WriteLine(name);
//Prints: email
Run Code Online (Sandbox Code Playgroud)

不可能使用反射flutter,我不想硬编码属性的名称,即用于查询 SQLite 表。有什么解决方法吗?

***目前我正在使用built_value图书馆。

Lev*_*hes 1

对于档案,我想这是不可能的,因为 Dart 在编译后不会存储变量的名称,而且正如您提到的,Flutter 不支持反射。

但您仍然可以通过将属性分组为它们所属对象的一部分来负责任地进行硬编码,就像使用 JSON 一样:

class User {
  final String email;
  final String name;
  const User({required this.email, required this.name});

  Map toJson() => {
    "email": email,
    "name": name,
  };
}
Run Code Online (Sandbox Code Playgroud)

当您使用 时,无需记住输入“电子邮件”和“姓名” User,只需拨打 即可User.toJson()。然后,当您想要重命名变量时,可以使用 IDE 的“全部重命名”,或者只是浏览类User以快速更改所有名称而不会遗漏任何名称。

  • 只是为了记录。C#中的nameof是一个编译时操作,结束代码包含一个字符串。这不是反射。 (9认同)