我发布这个是因为上次我问这个问题它没有得到解决,我似乎无法自己解决这个问题。我对C#和编程非常陌生,试图自学,并帮助你可以给予很好的帮助。
关于错误:
无法投射类型的对象 'System.Collections.Generic.List
1[test.Form1+comoditys]' to type 'System.Collections.Generic.List
1 [test.Form2 + mycost]'。
form2代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace test
{
public partial class Form2 : Form
{
public float Alligor;
public float Briochit;
public float Chollonin;
public float Espitium;
public float Hydrobenol;
public float Isopropenetol;
public float Metachropin;
public float Phlobotil;
public float Plasteosine;
public float Polynitrocol;
public float Polynucleit;
public float Prilumium;
public float Statchanol;
public float Titanium;
public float Vitricyl;
public float AlligorInput;
public float BriochitInput;
public float CholloninInput;
public float EspitiumInput;
public float HydrobenolInput;
public float IsopropenetolInput;
public float MetachropinInput;
public float PhlobotilInput;
public float PlasteosineInput;
public float PolynitrocolInput;
public float PolynucleitInput;
public float PrilumiumInput;
public float StatchanolInput;
public float TitaniumInput;
public float VitricylInput;
public float costofAlligor;
public float costofBriochit;
public float costofChollonin;
public float costofEspitium;
public float costofHydrobenol;
public float costofIsopropenetol;
public float costofMetachropin;
public float costofPhlobotil;
public float costofPlasteosine;
public float costofPolynitrocol;
public float costofPolynucleit;
public float costofPrilumium;
public float costofStatchanol;
public float costofTitanium;
public float costofVitricyl;
public double totalCost;
[Serializable]
public class mycost
{
public float secondPrice;
}
private List<mycost> costList = new List<mycost>();
private mycost o1 = null;
private mycost o2 = null;
private mycost o3 = null;
private mycost o4 = null;
private mycost o5 = null;
private mycost o6 = null;
private mycost o7 = null;
private mycost o8 = null;
private mycost o9 = null;
private mycost o10 = null;
private mycost o11 = null;
private mycost o12 = null;
private mycost o13 = null;
private mycost o14 = null;
private mycost o15 = null;
public Form2()
{
InitializeComponent();
o1 = new mycost();
o2 = new mycost();
o3 = new mycost();
o4 = new mycost();
o5 = new mycost();
o6 = new mycost();
o7 = new mycost();
o8 = new mycost();
o9 = new mycost();
o10 = new mycost();
o11 = new mycost();
o12 = new mycost();
o13 = new mycost();
o14 = new mycost();
o15 = new mycost();
costList.Add(o1);
costList.Add(o2);
costList.Add(o3);
costList.Add(o4);
costList.Add(o5);
costList.Add(o6);
costList.Add(o7);
costList.Add(o8);
costList.Add(o9);
costList.Add(o11);
costList.Add(o12);
costList.Add(o13);
costList.Add(o14);
costList.Add(o15);
FileStream df = new FileStream("comoditys.dat", FileMode.Open);
BinaryFormatter abf = new BinaryFormatter();
costList = (List<mycost>)abf.Deserialize(df);
df.Close();
if (costList != null)
{
if (costList.Count > 0)
Alligor = costList[0].secondPrice;
if (costList.Count > 1)
Briochit = costList[1].secondPrice;
if (costList.Count > 2)
Chollonin = costList[2].secondPrice;
if (costList.Count > 3)
Espitium = costList[3].secondPrice;
if (costList.Count > 4)
Hydrobenol = costList[4].secondPrice;
if (costList.Count > 5)
Isopropenetol = costList[5].secondPrice;
if (costList.Count > 6)
Metachropin = costList[6].secondPrice;
if (costList.Count > 7)
Phlobotil = costList[7].secondPrice;
if (costList.Count > 8)
Plasteosine = costList[8].secondPrice;
if (costList.Count > 9)
Polynitrocol = costList[9].secondPrice;
if (costList.Count > 10)
Polynucleit = costList[10].secondPrice;
if (costList.Count > 11)
Prilumium = costList[11].secondPrice;
if (costList.Count > 12)
Statchanol = costList[12].secondPrice;
if (costList.Count > 13)
Titanium = costList[13].secondPrice;
if (costList.Count > 14)
Vitricyl = costList[14].secondPrice;
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
AlligorInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
BriochitInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
CholloninInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
EspitiumInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox5_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
HydrobenolInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox6_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
IsopropenetolInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox7_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
MetachropinInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox8_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
PhlobotilInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox9_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
PlasteosineInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox10_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
PolynitrocolInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox11_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
PolynucleitInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox12_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
PrilumiumInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox13_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
StatchanolInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox14_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
TitaniumInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void textBox15_TextChanged(object sender, EventArgs e)
{
// 1st text box input is float
float tempFloat;
if (float.TryParse(textBox1.Text, out tempFloat))
{
VitricylInput = tempFloat;
}
else
MessageBox.Show("uh oh");
}
private void button1_Click(object sender, EventArgs e)
{
costofAlligor = Alligor * AlligorInput;
costofBriochit = Briochit * BriochitInput;
costofChollonin = Chollonin * CholloninInput;
costofEspitium = Espitium * EspitiumInput;
costofHydrobenol = Hydrobenol * HydrobenolInput;
costofIsopropenetol = Isopropenetol * IsopropenetolInput;
costofMetachropin = Metachropin * MetachropinInput;
costofPhlobotil = Phlobotil * PhlobotilInput;
costofPlasteosine = Plasteosine * PlasteosineInput;
costofPolynitrocol = Polynitrocol * PolynitrocolInput;
costofPolynucleit = Polynucleit * PolynucleitInput;
costofPrilumium = Prilumium * PrilumiumInput;
costofStatchanol = Statchanol * StatchanolInput;
costofTitanium = Titanium * TitaniumInput;
costofVitricyl = Vitricyl * VitricylInput;
totalCost = costofAlligor + costofBriochit + costofChollonin + costofEspitium + costofHydrobenol + costofIsopropenetol + costofMetachropin + costofPhlobotil + costofPlasteosine + costofPolynitrocol + costofPolynucleit + costofPrilumium + costofStatchanol + costofTitanium + costofVitricyl;
}
private void textBox16_TextChanged(object sender, EventArgs e)
{
textBox13.Text = totalCost.ToString();
}
}
}
答案 0 :(得分:1)
FileStream df = new FileStream("comoditys.dat", FileMode.Open);
BinaryFormatter abf = new BinaryFormatter();
costList = (List<mycost>)abf.Deserialize(df);
看起来您正在打开comoditiys.dat
并将其反序列化为List<comoditys>
,但您将它们错误地投射到List<mycost>
。
编辑:
试试这个
List<comodity> comodities = (List<comodity>)abf.Deserialize(df);
costList = comodities.Select(c => new mycost{secondPrice = c.comodityCost}).ToList();
答案 1 :(得分:1)
从表面上来看,comoditys.dat包含一个序列化的List<comoditys>
,您试图将反序列化结果转换为List<mycost>
修改
Linq示例根据评论,我不知道comoditys
对象如何映射到mycost
对象,因此属性名称只是示例。
MyComoditysList.Select(x => new mycost()
{
myCostProp1 = comoditysProp1,
myCostProp2 = comoditysProp2,
myCostProp3 = comoditysProp3
}).ToList();
答案 2 :(得分:0)
我在这里猜测:
abf.Deserialize(df)
返回什么?
是否会返回List<mycost>
或其他内容?
答案 3 :(得分:0)
您似乎正在尝试将comoditys
的列表转换为mycost
列表。你不能这样做。考虑到代码的大小,很难提供任何其他帮助。您应该尝试将其最小化,以最小化您正在经历的错误。