指定的强制转换无效 - 浮动列表的双重列表

时间:2017-06-24 21:34:30

标签: c# json list casting

所以我将一个float列表存储在一个JSON文件中,这就是JSON列表的样子:

Specified cast is not valid

我使用一个返回对象列表的方法,因为有多个列表要返回。然后我将对象列表转换为浮点数。但是,private void DisplayCutOffs(object sender, EventArgs e) { try { // Errors here unless I cast to double _view.CurrentCutOffValues = _systemVariablesManager.ReturnListBoxValues("CutOff").Cast<float>().ToList(); } catch (Exception ex) { LogErrorToView(this, new ErrorEventArgs(ex.Message)); } } 在执行此操作时会收到异常。但是如果我将对象列表转换为双精度则可行。这是两种方法:

 public List<object> ReturnListBoxValues(string propertyName) {
            if (File.Exists(expectedFilePath)) {
                var currentJsonInFile = JObject.Parse(File.ReadAllText(expectedFilePath));
                return JsonConvert.DeserializeObject<List<object>>(currentJsonInFile["SystemVariables"][propertyName].ToString());
            }
            else {
                throw new Exception("Setup file not located. Please run the Inital Set up application. Please ask Andrew for more information.");
            }
        }

存储库方法:

a = 45LLU * 44LLU * 43LLU * 42LLU * 41LLU * 40LLU;

但是我注意到如果我在foreach中循环遍历列表,我可以将每个值转换为浮点数。所以我不确定这里发生了什么。

有人知道吗?

1 个答案:

答案 0 :(得分:2)

听起来你是从object转换为(类型),其中(类型)是floatdouble。这是取消装箱操作,必须到正确的类型。该值为object知道它是什么 - 如果您将其正确拆箱,则抛出此异常(警告:如果您将其拆箱到相同大小的某个位置,则会有一点蠕动空间和兼容 - 例如,您可以将int-enum取消装入int和vv)。

选项:

  • 坚持使用object,但要知道数据是什么并正确拆箱 - 也许在取消框后,<{1}}(这里的float f = (float)(double)obj;是从(double)object的取消框; double是从(float)double的类型转换
  • 测试对象类型/使用float
  • 首先将属性更改为已定义的类型,而不是Convert.ToSingle

完整示例:

object