简体   繁体   English

无效的强制转换异常

[英]Invalid cast exception

I am posting this because the last time I asked this question it did not get solved and I cannot seem to solve this on my own.我发布这个是因为我上次问这个问题没有得到解决,我似乎无法自己解决这个问题。 I am very very new to C# and programming, trying to teach myself so and help you can give would be great.我对 C# 和编程非常陌生,尝试这样自学并帮助您提供会很棒。

So on to the error:继续错误:

Unable to cast object of type 'System.Collections.Generic.List 1[test.Form1+comoditys]' to type 'System.Collections.Generic.List 1[test.Form2+mycost]'.无法将“System.Collections.Generic.List 1[test.Form1+comoditys]' to type 'System.Collections.Generic.List

form2 code:表格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 . form1 可以在这里找到

    FileStream df = new FileStream("comoditys.dat", FileMode.Open);
    BinaryFormatter abf = new BinaryFormatter();
    costList = (List<mycost>)abf.Deserialize(df);

it looks like you are opening the comoditiys.dat and it deserializes to List<comoditys> but you are casting them incorrectly to List<mycost> .看起来您正在打开comoditiys.dat并将其反序列化为List<comoditys>但您将它们错误地转换为List<mycost>

EDIT:编辑:

Try this尝试这个

List<comodity> comodities = (List<comodity>)abf.Deserialize(df);
costList = comodities.Select(c => new mycost{secondPrice = c.comodityCost}).ToList();

On the face of it comoditys.dat contains a serialised List<comoditys> and you are trying to cast the deserialised result to a List<mycost>从表面上看,comoditys.dat 包含一个序列化的List<comoditys>并且您正试图将反序列化的结果转换为List<mycost>

EDIT编辑

Linq example as per comment, i don't know how a comoditys object maps to a mycost object so property names are just examples. Linq 示例根据评论,我不知道comoditys object 如何映射到mycost object 所以属性名称只是示例。

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

I'm making a guess here:我在这里做一个猜测:

What does abf.Deserialize(df) return? abf.Deserialize(df)返回什么?

Does it return List<mycost> or something else?它会返回List<mycost>还是其他东西?

It looks like you are trying to cast a list of comoditys to a list of mycost .看起来您正在尝试将商品列表投射到comoditys列表mycost You can't do that.你不能那样做。 It's difficult to provide any other assistance given the size of your code.鉴于代码的大小,很难提供任何其他帮助。 You should try to minimize it to the smallest reproduction of the error you're experiencing.您应该尝试将其最小化为您遇到的错误的最小再现。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM