无法解析构造函数'CsvReader(string)'

时间:2013-11-26 02:59:57

标签: c# csv

我正在尝试编写一个程序,将CSV文件加载到我创建的自定义类中。为此,我使用以下库:http://joshclose.github.io/CsvHelper/#mapping

我编写了我的实体类,如下所示:

public class BreakthroughCampaignEntity
{
    public string ConstituentId { get; set; }
    public string F2F { get; set; }
    public string GiftStatus { get; set; }
    public string Title1 { get; set; }
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public string PreferredAddress { get; set; }
    public string PreferredSuburb { get; set; }
    public string PreferredEmailNumber { get; set; }
    public string PreferrredHomeNumber { get; set; }
    public string PreferredWorkNumber { get; set; }
    public string PreferrredMobileNumber { get; set; }
    public string GiftAmount { get; set; }
    public DateTime GiftNextTransactionDueDate { get; set; }
    public DateTime GiftSpecificAttributesPledgeGiftSignUpDate { get; set; }
}

我的索引映射:

public class BreakthroughCampaignIndexMap : CsvClassMap<BreakthroughCampaignEntity>
{
    /// <summary>
    /// Creates a map by matching the CSV indexes to our entity class
    /// </summary>
    public override void CreateMap()
    {
        Map(m => m.ConstituentId).Index(0).Default("Unknown");
        Map(m => m.F2F).Index(1).Default("Unknown");
        Map(m => m.GiftStatus).Index(2).Default("Unknown");
        Map(m => m.Title1).Index(3).Default("Unknown");
        Map(m => m.FirstName).Index(4).Default("Unknown");
        Map(m => m.Surname).Index(5).Default("Unknown");
        Map(m => m.PreferredAddress).Index(6).Default("Unknown");
        Map(m => m.PreferredSuburb).Index(7).Default("Unknown");
        Map(m => m.PreferredEmailNumber).Index(8).Default("Unknown");
        Map(m => m.PreferrredHomeNumber).Index(9).Default("Unknown");
        Map(m => m.PreferredWorkNumber).Index(10).Default("Unknown");
        Map(m => m.PreferrredMobileNumber).Index(11).Default("Unknown");
        Map(m => m.GiftAmount).Index(12).Default("Unknown");
        Map(m => m.GiftNextTransactionDueDate).Index(13);
        Map(m => m.GiftSpecificAttributesPledgeGiftSignUpDate).Index(14);
    }
}

我还通过包管理器控制台安装了CSV帮助程序库,以确保我拥有最新版本。

不幸的是,当我去加载我的CSV时,使用以下内容:

var csv = new CsvReader(TextFileToProcess.Text.ToString());

var processedFile = csv.GetRecords<BreakthroughCampaignEntity>();

this StackExchange帖子中引用(Josh Close回答)我在TextFileToProcess.Text.ToString()下面收到以下错误:

  

无法解析构造函数'CsvReader(string)',候选人是:   CsvReader(CsvHelper.ICsvParser)(在CsvReader类中)   CsvReader(System.IO.TextReader)(在类CsvReader中)

我也尝试过使用:

var csv = new CsvReader(File.OpenRead(TextFileToProcess.Text.ToString()));

提供相同的错误。

我很想知道这意味着什么,而不仅仅是如何解决它!我的知识有一些差距,这意味着虽然这个错误似乎表明如何解决问题,但我不明白它告诉我的是什么。

2 个答案:

答案 0 :(得分:4)

错误消息表示没有CsvReader的构造函数,它将csv文本作为参数。然后,错误会告诉您可以使用哪些构造函数来帮助您找出正确的构造函数。

这个实例采用ICsvParser

的实例
CsvReader(CsvHelper.ICsvParser) (in class CsvReader)

这个可能是你最好的选择,需要TextReader

CsvReader(System.IO.TextReader) (in class CsvReader)

如果你有文件名,你可以这样做:

new CsvReader(File.OpenText(filePath));

如果您只有csv文本,则可以创建StringReader

new CsvReader(StringReader(TextFileToProcess.Text.ToString()));

答案 1 :(得分:2)

错误消息中显示的CsvReader的第二个构造函数的参数类型为System.IO.TextReader。因此,我认为你应该能够使用这个:

var csv = new CsvReader(File.OpenText(filePath));

其中filePath是一个字符串,其中包含您要打开的文件的路径。您似乎正在尝试为构造函数提供一个参数,该参数是一个文件的文本字符串,但它似乎没有构造函数。

Look at the example in the documentation for TextReader class