Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有没有办法查询类是否包含具有某个已知名称的实例变量?_Mysql_Dart_Dart Mirrors - Fatal编程技术网

Mysql 有没有办法查询类是否包含具有某个已知名称的实例变量?

Mysql 有没有办法查询类是否包含具有某个已知名称的实例变量?,mysql,dart,dart-mirrors,Mysql,Dart,Dart Mirrors,从MySql截取错误时,事先不知道传递给我的错误类的内容是什么。因此,我将代码: .catchError((firstError){ sqlMessage=firstError.message; 试试{ sqlError=firstError.osError; }捕获(NOINSTANCERROR){ sqlError=firstError.sqlState; } }); 在这个特定的例子中,我想知道e是否包含实例变量osError或sqlState,因为它们中的任何一个都包含特定的error

从MySql截取错误时,事先不知道传递给我的错误类的内容是什么。因此,我将代码:

.catchError((firstError){
sqlMessage=firstError.message;
试试{
sqlError=firstError.osError;
}捕获(NOINSTANCERROR){
sqlError=firstError.sqlState;
}
});

在这个特定的例子中,我想知道e是否包含实例变量
osError
sqlState
,因为它们中的任何一个都包含特定的errorcode。更一般地说(为了提高我的知识水平),如果(firstError.instanceExists(osError))…以及如何编写这样的代码是可能的吗?

这应该是您想要的:

导入“dart:mirrors”;
...
//关于类声明的信息
reflect(firstError).type.declarations.containsKey(#osError);
//有关当前实例的信息
var m=reflect(firstError).type.instanceMembers[#osError];
var hasOsError=m!=null&&m.isGetter;

Günter的回答正确地说明了如何使用镜像,但是对于您的特定用例,我建议使用“是”检查而不是镜像。我不知道mysql API的具体情况,但它可能看起来像这样:

.catchError((error) {
   sqlMessage = error.message;
   if (error is MySqlException) {
     sqlError = error.sqlState;
   } else if (error is OSError) {
     sqlError = error.errorCode;
   }
})

也许你可以向本书的作者请教。

你能用一个“is”表达式来测试这是哪个异常类吗?镜像是一个重量级的锤子,很难编译成js,如果可以的话最好只使用“是”。你能举个例子吗。如果类中未定义变量,则“if(class.variable is String)”会引发异常。在没有镜像的情况下,无法测试Dart中对象上是否存在变量。但是,您可以测试对象是否是类,因为您知道类始终具有变量,所以这就是您所需要的。如果(ex是MySqlException){print(ex.sqlState);}