0

C# Win Formsにこのコードがあり、いくつかの数値を比較していますが、次のエラーが表示されます。

InvalidCastException

「Char」から「single」へのキャストが無効です。

私はこのエラーを理解していません..eny enlightmentはいいでしょう:)

エラーはこの行に来ます

float old_list_diff = Convert.ToSingle(ReadLine[0]) - Convert.ToSingle(ReadLine[i+1]);

ここに私の完全なコードがあります.:

private void button7_Click(object sender, EventArgs e)
{
  listBox1.Items.Clear();
  StreamReader SR = new StreamReader(Application.StartupPath + @"\old_Score_list.txt");
  string ReadLine = SR.ReadToEnd();

  for (int i = 0; i < 14; i++)
  {
      float new_list_diff = Convert.ToSingle(Score_list.Items[0]) - Convert.ToSingle(Score_list.Items[i+1]);
      float old_list_diff = Convert.ToSingle(ReadLine[0]) - Convert.ToSingle(ReadLine[i+1]);
      //int old_list_diff = 20;

      //skifter farve efter sidste i
      if (new_list_diff > old_list_diff == true)
      {
          //listBox1.ForeColor = Color.Green;
          listBox1.Items.Add("?");
      }
      else
      {
          //listBox1.ForeColor = Color.Red;
          listBox1.Items.Add("?");
      }
  }
}
4

5 に答える 5

2

ReadLine は文字列です。C# では、文字列は実際には文字の配列です。コードを記述した方法で、プログラムはファイルの最初の行を変数 ReadLine に読み込みます。実際には文字の配列である場合、ReadLine を文字列の配列として扱おうとしているようです。

したがって、ReadLine = "Hello World!" の場合、ReadLine[0] = "H"

ファイルから行を文字列の配列にロードしたいと思います。その後、コードが記述されている方法でコンテンツにアクセスできる場合があります。

于 2012-08-29T20:01:56.250 に答える
2
string ReadLine = SR.ReadToEnd();

ファイル全体の大きな文字列を提供します。

ReadLine[0]

最初の文字を与えるので、おそらく「0」または「1」だけです。それはフロートにキャストできません。

私はあなたが望んでいたと思います:

string[] lines = SR.ReadLines();

これにより、各行に 1 つずつ、文字列の配列が得られます。次にlines[0]、(正しい形式であれば) float に変換できる文字列になりますが、実際に必要なものについて少し推測する必要があります。

于 2012-08-29T19:59:42.577 に答える
1

ええと、CharとSingle(別名float)の間で変換することはできません。文字列の最初の文字とその文字列の2番目から15番目の文字を数字に変換しますfloatか?その場合は、最初に整数に変換してから、その整数を浮動小数点数にキャストしてみてください。ただし、CharとInt32の間の変換では、文字のASCII(ユニコード)値が返されることに注意してください。これが目的かどうかはわかりません...

于 2012-08-29T19:57:37.500 に答える
1

この変換はサポートされていません。変換のリストを確認してください。http: //msdn.microsoft.com/en-us/library/system.convert.tosingle.aspx 最初にこれらの文字を整数(たとえばInt16)値に変換することをお勧めします。 。

于 2012-08-29T19:57:42.760 に答える
0

値が数値以外のタイプ(「ABCD」など)であるか、そのタイプの範囲を超えている(数値が大きすぎるか小さすぎる)ため、InvalidCastExceptionが発生する可能性があります。

デバッガーを接続し、ReadLine[0]とReadLine[i + 1]の値を調べると、キャストできない値が表示されるはずです。

于 2012-08-29T19:57:34.523 に答える