FormatException未处理float.Parse

时间:2016-07-14 01:28:30

标签: c# .net exception formatting

我有FormatException问题。这是代码。如何更改此代码来编译这段代码?

private Tacka[] load() 
{
   ArrayList dataX = new ArrayList();
   ArrayList dataY = new ArrayList();

   var citac = new StreamReader(File.OpenRead(@"C:\Users\Marko\Documents\Visual Studio 2012\Projects\K-Means\s1.csv"));
   var linija = citac.ReadLine();

   if (linija.StartsWith("%") || linija.StartsWith("@") || linija.StartsWith("/") || linija.Length == 0)
   {

   }
   else 
   {
       var values = linija.Split(' ');
       dataX.Add(values[0]);
       dataY.Add(values[1]);
   }
   Tacka[] nizTacaka = new Tacka[dataX.Count];
   //List<Tacka> tacka = new List<Tacka>();
   for (int i = 0; i < dataX.Count; i++)
   {
       //tacka.Add(new Tacka(float.Parse(dataX[i].ToString()), float.Parse(dataY[i].ToString())));
       nizTacaka[i] = new Tacka(float.Parse(dataX[i].ToString()), float.Parse(dataY[i].ToString()));
   }

   return nizTacaka;
}

1 个答案:

答案 0 :(得分:2)

  当参数的格式为时,抛出

The exception   无效,或者复合格式字符串格式不正确。

在您的情况下,它被抛出,因为dataX[i].ToString()和/或dataY[i].ToString()无法转换为浮点值(可能是nullEmpty,或者数字以外的字符)。因此,您可以使用TryParse检查转换状态,并仅在转换正常时创建对象。请尝试以下代码:

float xValue, yValue;
for (int i = 0; i < dataX.Count; i++)
{
    if (float.TryParse(dataX[i].ToString(),out xValue) && float.TryParse(dataY[i].ToString(),out yValue))
    {
          nizTacaka[i] = new Tacka(xValue, yValue);
    }
    else
    {
     Console.WriteLine("Conversion failed");
    }

}