尝试确定变量是否属于某种类型时出现语法错误

mra*_*d01 2 dart

就像标题所说:如果你有一个存储在变量中的Type,就我所知,没有办法将你的实际对象与这个类型的变量进行比较.我可以完成我正在尝试用镜子做的事情,但我不愿意,如果可能的话.

void example() {
  Type myType = String;
  String myExample = "Example";

  //Syntax error here: The name 'myType' is not a type and cannot be used in an 'is' expression
  if (myExample is myType) {

  }
}
Run Code Online (Sandbox Code Playgroud)

lrn*_*lrn 5

通常,您无法使用Type对象测试值是否为类型.

类型对象是反射类型,而不是真实类型.它们代表真实类型,但您不能在需要类型的代码中使用它们:作为类型断言,作为泛型类型参数或使用is/as运算符.您必须在这些位置使用类型的名称,而不是恰好包含Type对象的普通变量的名称.

使用镜子的聪明的东西可能会到达那里,但在大多数情况下它可能有点过分(我知道你不需要它).

你可以做的是,不要传递原始的Type对象.您可以改为创建自己的类型抽象,例如:

class MyType<T> {
  const MyType();
  Type get type => T;
  bool isA(Object object) => object is T;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用它来表示类型,而不是Type对象,并执行以下操作:

void main(List<String> args) {
  MyType myType = const MyType<String>();
  String myExample = "Example";

  if(myType.isA(myExample)) {
    print('is');
  } else {
    print('is not');
  }
}
Run Code Online (Sandbox Code Playgroud)

这确实需要您的整个程序使用您的类型对象来传递类型,但它也为您提供了对这些对象的大量控制,因此您可以实现所需的功能.