从MySql拦截错误时,事先不知道传递给我的错误类的内容是什么。所以我编码:

.catchError((firstError) {
  sqlMessage = firstError.message;
  try {
    sqlError = firstError.osError;
  } catch (noInstanceError){
    sqlError = firstError.sqlState;
  }
});

在这种特定情况下,我想知道e是否包含实例变量osErrorsqlState,因为它们中的任何一个都包含特定的错误代码。总体而言(为了提高我的知识),可能会写类似if (firstError.instanceExists(osError)) ...的东西,怎么写?

最佳答案

这应该做您想要的:

import 'dart:mirrors';

...

// info about the class declaration
reflect(firstError).type.declarations.containsKey(#osError);

// info about the current instance
var m = reflect(firstError).type.instanceMembers[#osError];
var hasOsError = m != null && m.isGetter;

07-24 19:25