簡體   English   中英

指定的類型轉換無效-浮點數列表的雙精度數列表

[英]Specified cast is not valid - List of double to list of float

所以我將float列表存儲在JSON文件中,這就是JSON列表的樣子:

"RollSize": "[17.5,18.0,19.0,23.5,26.5,35.0,35.5,38.0]"

我使用一種返回對象列表的方法,因為有多個列表要返回。 然后,我將對象列表轉換為浮點型。 但是,執行此操作時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.");
            }
        }

但是我注意到,如果我在foreach中遍歷列表,則可以將每個值都轉換為浮點數。 所以我不確定這是怎么回事。

有人知道嗎

聽起來您正在將objectobject投射到(類型),其中(類型)是floatdouble 這是拆箱操作,必須對正確的類型進行 該值(作為object知道它的含義 -如果您未正確將其拆箱,則會拋出此異常(警告:如果將其拆箱為相同大小且兼容的東西,則會有一點蠕動空間-例如,您可以將int-枚舉為int和vv)。

選項:

  • 堅持object ,但知道數據是什么,並正確地取消裝箱-也許取消裝箱進行轉換,即float f = (float)(double)obj; (這里的(double)是從objectdouble的取消框; (float)是從doublefloat的類型轉換)
  • 測試對象類型/使用Convert.ToSingle
  • 首先將屬性更改為定義的類型,而不是object

完整示例:

List<object> actuallyDoubles = new List<object>{ 1.0, 2.0, 3.0 };
List<double> doubleDirect = actuallyDoubles.ConvertAll(x => (double)x); // works
// List<float> floatDirect = actuallyDoubles.ConvertAll(x => (float)x); // fails per question
List<float> floatViaDouble = actuallyDoubles.ConvertAll(x => (float)(double)x); // works
List<float> floatViaConvert = actuallyDoubles.ConvertAll(x => Convert.ToSingle(x)); // works

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM