2011-06-28 55 views
0

我发布这是因为上次我问这个问题没有得到解决,我似乎无法解决这个问题。我对C#和编程非常陌生,试图自我教导并帮助你可以给予很大的帮助。无效的投射异常

所以到错误:

无法转换 类型的对象 'System.Collections.Generic.List 1[test.Form1+comoditys]' to type 'System.Collections.Generic.List 1 [test.Form2 + mycost]'。

窗口2代码:

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(); 

     } 
    } 
    } 

form1 can be found here

回答

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(); 
+0

是的,但我需要comoditys.dat的内容去列表有没有办法我可以做到这一点? – doc

+0

@doc试试我的编辑。 –

+0

非常感谢你,让我知道如何修复它 – doc

0

我在这里做一个猜测:

什么abf.Deserialize(df)回报?

它会返回List<mycost>还是别的?

+0

是的,它应该返回一个列表,因为这是保存到它读取 – doc

+0

列表或一些其它列表 Viv

+0

是什么返回文件?调试到这一点,并找出...我猜它没有返回列表 Viv

0

它看起来像你试图将一列comoditys列表mycost。你不能那样做。鉴于代码的大小,很难提供任何其他帮助。您应该尝试将其最小化至您遇到的错误的最小再现。

+0

我认为这是怎么回事...列表comoditys保存到文件列表mycost从同一个文件读取,但我不知道如何解决它,如果一个列表不能被另一个读取? – doc

1

在表面上看comoditys.dat包含序列List<comoditys>和你想的deserialised结果转换为List<mycost>

编辑

Linq示例根据评论,我不知道如何comoditys对象映射到mycost对象,所以属性名称只是例子。

MyComoditysList.Select(x => new mycost() 
{ 
    myCostProp1 = comoditysProp1, 
    myCostProp2 = comoditysProp2, 
    myCostProp3 = comoditysProp3 
}).ToList(); 
+0

是的,这就是我想要做的 – doc

+0

嗯,你不能,因此演员例外。你需要将其反序列化到列表然后你可以使用Linq将其转换为列表

+0

有没有办法做到这一点,不会给例外?任何提示或信息将是伟大的 – doc