无效的强制转换异常

时间:2011-06-28 13:21:30

标签: c#

我发布这个是因为上次我问这个问题它没有得到解决,我似乎无法自己解决这个问题。我对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();

        }
    }
  }

form1 can be found here

4 个答案:

答案 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列表。你不能这样做。考虑到代码的大小,很难提供任何其他帮助。您应该尝试将其最小化,以最小化您正在经历的错误。