格式异常调试时未处理

时间:2013-11-24 00:29:51

标签: c# visual-studio-2010

在调试代码时,Visual Studio给我一个“格式异常未处理”,同时突出显示这行代码:'CustObj.d_CustDiscount = Convert.ToDecimal(gs_InPutBuffer.Substring(000,004));'

我一直在谷歌搜索正确的格式,并没有提出任何修复。所以我的主要问题是,如何重写此代码才能使其正常工作?

感谢您的帮助!

如果您需要参考,以下是完整的程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using CustFile_DLL;

namespace FileConvertorPA03
{
    class Program
    {
        //add these to handle I/O
        //instatiate streamreader
        private static StreamReader TextfileIn = new StreamReader("customers.txt");
        //instantiate the dll
        private static CustFileClass CustObj = new CustFileClass();
        //a few vars
        private static string gs_InPutBuffer = "";
        private static Int32 gi_TotalRec = 0, gi_FirstRecNo = 0;
        private static bool gb_FirstRec = true;
        static void Main(string[] args)
        {
            while ((gs_InPutBuffer = TextfileIn.ReadLine()) != null)
            {
                ParsetoAttributes();
                CustObj.AddObject();
            }//end while
            PopMessageBox();
            TextfileIn.Close();
        }//end main

        //method to parse input buffer to class attributes
        private static void ParsetoAttributes()
        {
            CustObj.s_CustName = gs_InPutBuffer.Substring(000, 033).Trim();
            CustObj.s_CustAddress = gs_InPutBuffer.Substring(033, 032).Trim();
            CustObj.s_CustZip = gs_InPutBuffer.Substring(065, 005);
            CustObj.s_CustPhone = gs_InPutBuffer.Substring(070, 010);
            CustObj.d_CustDiscount = Convert.ToDecimal(gs_InPutBuffer.Substring(000, 004));
        }//end parse attributes

        //method to count records added
        static void CountRecs()
        {
            if (gb_FirstRec == true)
            {
                gi_FirstRecNo = CustObj.i_CustNumber;
                gb_FirstRec = false;
            }//end if 
            gi_TotalRec++;
        }//end count recs

        public static void PopMessageBox()
        {
            MessageBox.Show(String.Format("Message: \n\tRecords Added \t{0,6}n\tFirst    Rec    Added\t     {1,6}\n\tLast   Rec  Added\t{2,6}",
            gi_TotalRec, gi_FirstRecNo, CustObj.i_CustNumber),"File Conversion Message:",
            MessageBoxButtons.OK, MessageBoxIcon.Information);

    }//end class
    }
}//end namespace

1 个答案:

答案 0 :(得分:0)

用以下内容替换ToDecimal来电,找出问题所在:

try
{
    CustObj.d_CustDiscount = Convert.ToDecimal(gs_InPutBuffer.Substring(0, 4));
}
catch (FormatException e)
{
    Console.WriteLine(gs_InPutBuffer.Substring(0, 4));
    Console.WriteLine(e.Message);
}

如果这不是控制台应用程序,您可以更改catch块中的代码以写出MessageBox。您还可以在调用Substring

的参数中省略前导零