【问题标题】:Cannot resolve constructor 'CsvReader(string)'无法解析构造函数'CsvReader(string)'
【发布时间】:2013-11-26 02:59:56
【问题描述】:

我正在尝试编写一个程序,将 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()));

这提供了相同的错误。

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

【问题讨论】:

    标签: c# csv


    【解决方案1】:

    错误消息表示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()));
    

    【讨论】:

      【解决方案2】:

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

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

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

      Look at the example in the documentation for TextReader class

      【讨论】:

        猜你喜欢
        • 2015-05-29
        • 1970-01-01
        • 2015-05-05
        • 2017-02-28
        • 2016-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多