0

我在C# Win Forms中有这段代码,它比较了一些数字,但它给了我以下错误:

无效转换异常

从“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
string ReadLine = SR.ReadToEnd();

为您提供整个文件的大字符串。

ReadLine[0]

给你第一个字符,所以可能只是“0”或“1”。不能将其转换为浮点数。

我猜你想要:

string[] lines = SR.ReadLines();

这会给你一个字符串数组,每行一个。那么lines[0]确实是(如果格式正确)一个可以转换为浮点数的字符串,但我不得不猜测一下你真正想要什么。

于 2012-08-29T19:59:42.577 回答
2

ReadLine 是一个字符串,而在 C# 中,字符串实际上是一个字符数组。您编写代码的方式是,程序将文件的第一行读入变量 ReadLine。似乎您试图将 ReadLine 视为字符串数组,而实际上它是字符数组。

所以,如果 ReadLine = "Hello World!",那么 ReadLine[0] = "H"

我认为您想将文件中的行加载到字符串数组中。然后,您可能能够以编写代码的方式访问内容。

于 2012-08-29T20:01:56.250 回答
1

好吧,您不能在 Char 和 Single (又名float)之间进行转换。您真的要将字符串的第一个字符和该字符串的第 2-15 个字符转换为float数字吗?如果确实如此,您可以尝试先将其转换为整数,然后将该整数转换为浮点数。但请注意, Char 和 Int32 之间的转换将返回character 的 ASCII (unicode) 值,我不确定这是否是你想要的......

于 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

您可以获得 InvalidCastException,因为该值是非数字类型(如“ABCD”)或超出该类型的范围(数字太大或太小)。

如果您附加调试器并检查 ReadLine[0] 和 ReadLine[i+1] 中的值,您应该会看到它无法转换的值。

于 2012-08-29T19:57:34.523 回答