[英]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中遍歷列表,則可以將每個值都轉換為浮點數。 所以我不確定這是怎么回事。
有人知道嗎
聽起來您正在將object
從object
投射到(類型),其中(類型)是float
或double
。 這是拆箱操作,必須對正確的類型進行 。 該值(作為object
) 知道它的含義 -如果您未正確將其拆箱,則會拋出此異常(警告:如果將其拆箱為相同大小且兼容的東西,則會有一點蠕動空間-例如,您可以將int-枚舉為int和vv)。
選項:
object
,但知道數據是什么,並正確地取消裝箱-也許在取消裝箱后進行轉換,即float f = (float)(double)obj;
(這里的(double)
是從object
到double
的取消框; (float)
是從double
到float
的類型轉換) 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.