gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:59:09 25 4
gpt4 key购买 nike

正如标题所说:如果您将类型存储在变量中,则据我所知,无法将实际对象与该类型变量进行比较。我也许可以用镜子完成我想要做的事情,但如果可能的话我宁愿不这样做。

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) {

}
}

最佳答案

您通常无法使用 Type 对象测试值是否属于某种类型。

类型对象是反射类型,而不是真实类型。它们代表真实类型,但您不能在需要类型的代码中使用它们:作为类型断言、作为泛型类型参数或与 is/as 运算符一起使用。您必须在这些地方使用类型的名称,而不是恰好保存 Type 对象的普通变量的名称。

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

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

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

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

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

if(myType.isA(myExample)) {
print('is');
} else {
print('is not');
}
}

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

关于dart - 尝试确定变量是否属于某种类型时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com