Dart类“ String”没有实例方法“ cast”

时间:2019-06-25 18:24:44

标签: flutter dart

我编写了一个dart方法,该方法采用通用类型T,然后尝试将动态类型转换为T。(编辑:此后,我从等式中删除了通用类型,并且从dynamic转换为String仍然失败,同样的错误。)

在这种特定情况下,我将String传递为T。

以下行引发错误

Protected void wystaw_liste (object obj)
        {
            if (obj == null) return;
            Type type = obj.GetType();
            PropertyInfo[] properties = type.GetProperties();

            foreach (PropertyInfo property in properties)
            {
                object propValue = property.GetValue(obj, null);
                var elems = propValue as IList;
                if (elems != null)
                {
                    foreach (object item in elems)
                    {
                        wystaw_liste(item);
                    }
                }
                else
                {
                    if (property.PropertyType.Assembly != type.Assembly)
                    {
                        if (propValue != null)
                        {
                            parametry_list.Add(propValue.ToString());
                        }
                    }
                }
            }
        }

完整的代码如下...

 T result = value.cast<T>();

我得到的错误如下。在第一次调用我的应用程序代码后,我已经修剪了堆栈跟踪。

  

06-25 09:34:04.883 I / flutter(7755):类'String'没有实例   方法“ cast”。 06-25 09:34:04.883 I / flutter(7755):接收方:“ foo1”   06-25 09:34:04.883 I / flutter(7755):尝试调用:cast()   06-25 09:34:04.920 I / flutter(7755):当引发异常时,   这是堆栈:06-25 09:34:05.004 I / flutter(7755):#0
  Object.noSuchMethod(dart:core-patch / object_patch.dart:50:5)06-25   09:34:05.011 I / flutter(7755):#1 JsonObject.getValue   (软件包:my_app / Util / json_parser.dart:62:26)

1 个答案:

答案 0 :(得分:1)

cast是在ListIterable上的方法,而不是在常规类型上的方法。您正在寻找as

T result = value.cast<T>();替换为T result = value as T;。如果value不是T,则会抛出此错误。要么忍受,要么抓住并扔掉JsonParseException