4

参考我之前的问题,我已经调整了我的代码以Generics使用

FileHelperEngine engine;
public DateTime ExportResultsToCsv<T>(string filePath, string HeaderLine, List<T> data)   
{
    engine = new FileHelperEngine(typeof(T)) { HeaderText = HeaderLine };
    engine.WriteFile(filePath, data);
    return DateTime.Now;   
}

但是,当我尝试将其集成到我的代码中时,我面临以下 2 个错误:

错误 1 ​​'FileHelpers.FileHelperEngine<object>.WriteFile(string, System.Collections.Generic.IEnumerable<object>)' 的最佳重载方法匹配有一些无效参数

错误 2参数 2:无法从 'System.Collections.Generic.List<T>' 转换为 'System.Collections.Generic.IEnumerable<object>'

我无法理解错误是关于什么的。有人可以帮忙吗。

错误行:

engine.WriteFile(filePath, data);

更新1:

我正在FileHelper.dll用于 Csv 文件转换,并且FileHelperEngine是属于该 dll 的类。

Updates2: 正如@sza 建议的那样,我进行了更改,以下是我的错误截图

在此处输入图像描述 提前致谢。

4

3 回答 3

3

这就是为什么。让我们看一下源代码

        /// <include file='FileHelperEngine.docs.xml' path='doc/WriteFile/*'/>
#if ! GENERICS
        public void WriteFile(string fileName, IEnumerable records)
#else
        public void WriteFile(string fileName, IEnumerable<T> records)
#endif
        {
            WriteFile(fileName, records, -1);
        }

由于您没有使用泛型类型FileHelperEngine(泛型方式是FileHelperEngine<T>),您可以看到该方法采用第二个参数 as IEnumerable,这不是泛型IEnumerable<T>,而是对非泛型集合的简单迭代。

因此,我相信您可以执行以下操作来使您的代码正常工作:

engine.WriteFile(filePath, (IEnumerable)data);

或者

engine.WriteFile(filePath, data as IEnumerable);

或者

engine.WriteFile(filePath, data.Cast<Object>());

希望能帮助到你。

于 2013-09-02T05:58:37.977 回答
2

尝试FileHelperEngine<T>代替FileHelperEngine

public DateTime ExportResultsToCsv<T>(string filePath, string HeaderLine, List<T> data)  where T : class    
{
    FileHelperEngine<T> engine = new FileHelperEngine<T>() { HeaderText = HeaderLine };
    engine.WriteFile(filePath, data);
    return DateTime.Now;   
}

[FixedLengthRecord]
public class Foo
{

}

并使用:

ExportResultsToCsv<Foo>("", new List<Foo>());
于 2013-09-02T05:30:39.320 回答
2

我修复了您问题中的通用标签,现在很明显您正在尝试WriteFile使用无效类型进行调用。尝试将您的对象投射到对象。

engine.WriteFile(filePath, data.Cast<Object>());

出现问题是因为List<T>implements IEnumerable<T>,而不是IEnumerable<Object>该方法所期望的。

于 2013-09-02T05:35:13.600 回答