如何在Dart中将变量名转换为字符串?

3
很新于Flutter和Dart,所以请原谅我表达不清的问题。
这是我拥有的通用代码:
// Constructor class
class ctr {
  String i;
  ctr(String a){
    this.a = a; 
}

// New variables based on contsructor
var ctrA = ctr('a');
var ctrB = ctr('b');
var ctrC = ctr('c');

// Storing the variables based on constructor in an array
List ctrList = [ctrA, ctrB, ctrC]

void main() {
  String match = 'ctrB';
  for (var i = 0; i<ctrList.length; i++) {
    if(match == ctrList.toString() {
      print('The string of your match is ${ctrList[i].a}');
    } else {
      print('Error!);
    }
  }
}

当前输出为 Error!。相反,我想要的是 a

正如您所看到的,我正在尝试将变量 match 迭代到存储基于前面提到的构造函数的变量的数组中,如果匹配,则打印出它所匹配的构造函数中的值。runtimeType 只能让我得到原始类的名称(将是 ctr)。

我尝试使用 toString() 来转换变量名,但也没有成功。我需要一种方法来将这些变量名转换为字符串并进行匹配,但我不确定该怎么做。

先感谢您的帮助!


在声明类名时,请遵循驼峰命名法约定。 - undefined
2个回答

3

在 Dart 中,无法获取对象的名称。例如,C# 有 nameof() 函数,但是 Dart 没有类似的功能。

话虽如此,可能有更简单的方法来解决你需要的问题。所以可以随时寻求替代方案。

如果您只想将变量名用作某种标识符,可以尝试使用 Maps。

Map<String,String> x = {"ctrB" : "b"};

他们允许您定义任何类型的键和值。

编辑:另外,这个声明。
class ctr {
  String i;
  ctr(String a){
    this.a = a; 
}

可以简化为这样:
class ctr {
  String i;
  ctr(this.i);

}

当元素类型为Map<String, String>时,存储在数组中的元素类型是什么?我猜我的List<ctr>不能再起作用了。 - undefined
这将是一个List<Map<String,String>>,即字符串的映射列表 :D。当然,如果你愿意,你仍然可以保留你的对象,只需使用Map<String,ctr>或任何其他类型的组合。 - undefined

1
这是如何声明自定义对象列表的方法。
List<ctr> ctrList= [ ctrA , ctrB , ctrC ];

void main() {
String match = 'ctrB';
for (var index = 0; i<ctrList.length; i++) {
if(match == ctrList[index].i {
  print('The string of your match is ${ctrList[i].a}');
} else {
  print('Error!);
}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接