public override T[] ParseFile(string filePath)
        {
            var values = new List <T>();

            var fullFilePath = Path.GetFullPath(filePath);

            using (var reader = new StreamReader(File.OpenRead(fullFilePath)))
            {
                var context = new FileLineContext(fullFilePath);

                while (!reader.EndOfStream)
                {
                    context.SetNextLine(reader.ReadLine());

                    try
                    {
                        var result = ParseLine(context);

                        if (!result.SkipLine)
                        {
                            values.Add(result.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        var pex = new FileLineParseException(context, ex.Message, ex);
                        WriteError(pex);
                        throw pex;
                    }
                }
            }

            return(values.ToArray());
        }
        private void WriteError(FileLineParseException pex)
        {
            if (ErrorWriter == null)
            {
                return;
            }

            ErrorWriter.WriteLine(pex.Context.FileName);
            ErrorWriter.WriteLine(pex.Message);
        }