さて、私はかなり最近行った私の学校のプロジェクトの 1 つからこのアイデアをモデル化していますが、なぜそれが現時点でうまくいかないのかわかりません.
プログラムの現在の計画は、DataManager を使用して、ユーザーがメニューから入力する数値を含む文字列配列を保持し、それらを整数に変換し、最終的に演算子などでそれらを線引きすることです。私は最後の部分を理解していませんし、私が音を立てたようにそのアイデアがうまくいくとは思いません。しかし、現在、プログラムが文字列値を配列に格納するのに問題があります。
プログラムを実行するときの現在の目標は、「1」をクリックして「Enter」を押すことです。その場合、出力を「Number: 1」のようにしたいのですが、例外をスローし続けます。
「タイプ 'System.InvalidCastException' の未処理の例外が mscorlib.dll で発生しました
追加情報: ソース配列の少なくとも 1 つの要素が、宛先配列型にキャストできませんでした。」
これが私のDataManagerクラスのコードです....
public class DataManager
{
public ArrayList calculation;
public DataManager()
{
calculation = new ArrayList();
}
public void addNumbers(string n)
{
calculation.Add(n);
}
// public NumbersAndOperators[] getNumbers()
//{
// return //(NumbersAndOperators[])calculation.ToArray(typeof(NumbersAndOperators));
//}
public void removeNumbers(NumbersAndOperators n)
{
calculation.Remove(n);
}
public void addOperators(string o)
{
calculation.Add(o);
}
public NumbersAndOperators[] getOperators()
{
return (NumbersAndOperators[])calculation.ToArray(typeof(NumbersAndOperators));
}
public void removeOperators(NumbersAndOperators o)
{
calculation.Remove(o);
}
}
}
これが私のNumbersAndOperatorsクラスのコードです
public class NumbersAndOperators
{
private string number; private string operate;
public NumbersAndOperators(string n, string o)
{
number = n;
operate = o;
}
public void setNumber(string n)
{
number = n;
}
public void setOperate(string o)
{
operate = o;
}
public string getNumber(string n)
{
return n;
}
public string getOperate(string o)
{
return o;
}
}
}
これが私のフォームのコードです
public partial class Form1 : Form
{
public DataManager data;
public Form1(DataManager d)
{
InitializeComponent();
data = d;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button10_Click(object sender, EventArgs e)
{
string n = "0";
data.addNumbers(n);
}
private void button1_Click(object sender, EventArgs e)
{
string n = "1";
data.addNumbers(n);
}
private void button2_Click(object sender, EventArgs e)
{
string n = "2";
data.addNumbers(n);
}
private void button3_Click(object sender, EventArgs e)
{
string n = "3";
data.addNumbers(n);
}
private void button4_Click(object sender, EventArgs e)
{
string n = "4";
data.addNumbers(n);
}
private void button5_Click(object sender, EventArgs e)
{
string n = "5";
data.addNumbers(n);
}
private void button6_Click(object sender, EventArgs e)
{
string n = "6";
data.addNumbers(n);
}
private void button7_Click(object sender, EventArgs e)
{
string n = "7";
data.addNumbers(n);
}
private void button8_Click(object sender, EventArgs e)
{
string n = "8";
data.addNumbers(n);
}
private void button9_Click(object sender, EventArgs e)
{
string n = "9";
data.addNumbers(n);
}
private void division_Click(object sender, EventArgs e)
{
string o = "/";
data.addOperators(o);
}
private void multiplication_Click(object sender, EventArgs e)
{
string o = "*";
data.addOperators(o);
}
private void subtraction_Click(object sender, EventArgs e)
{
string o = "-";
data.addOperators(o);
}
private void addition_Click(object sender, EventArgs e)
{
string o = "+";
data.addOperators(o);
}
private void dec_Click(object sender, EventArgs e)
{
string n = ".";
data.addNumbers(n);
}
private void equals_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();
NumbersAndOperators[] num = data.getNumbers();
Label tmp;
for (int i = 0; i < num.Length; i++)
{
tmp = new Label();
tmp.Text = "Number:" + data.getNumbers();
tmp.AutoSize = true;
tmp.Location = new Point(0, 85);
panel1.Controls.Add(tmp);
}
}
}
}
ありとあらゆるアドバイスに感謝します。これは私がこれまでに見たことのない問題であり、読むだけでは理解がさらに難しくなります。私はしばらくの間、ばかのようにグーグルで検索してきましたが、出てくるすべてが理解できません。
また、例外をスローしている行をコメントアウトしました