参考我的previous question,我调整了我的代码,使用 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;
}
但是,当我尝试将其集成到我的代码中时,我面临以下两个错误:
错误1 最佳重载方法匹配 “FileHelpers.FileHelperEngine&LT;对象&gt; .WriteFile(字符串, System.Collections.Generic.IEnumerable&lt; object&gt;)'有一些无效 参数
错误2 参数2:无法转换 'System.Collections.Generic.List&LT; T&GT;'至 'System.Collections.Generic.IEnumerable&LT;对象&gt;'
我无法得到错误的内容。有人可以帮忙吗。
错误行:
engine.WriteFile(filePath, data);
Updates1:
我正在使用 FileHelper.dll
进行Csv文件转换,而 FileHelperEngine
类属于该dll。
Updates2: 正如@sza建议的那样,我更改了以下是我的错误的屏幕截图
提前谢谢。
答案 0 :(得分:3)
这就是原因。我们来看看source code
/// <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>
),您可以看到该方法将第二个参数设为IEnumerable
,不通用IEnumerable<T>
,但是对非泛型集合的简单迭代。
因此,我相信您可以执行以下操作以使代码正常工作:
engine.WriteFile(filePath, (IEnumerable)data);
或
engine.WriteFile(filePath, data as IEnumerable);
或
engine.WriteFile(filePath, data.Cast<Object>());
希望它有所帮助。
答案 1 :(得分: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>());
答案 2 :(得分:2)
我在您的问题中修复了通用标记,现在很明显,您尝试使用无效类型调用WriteFile
。尝试将对象转换为对象。
engine.WriteFile(filePath, data.Cast<Object>());
问题出现是因为List<T>
实现了IEnumerable<T>
,而不是IEnumerable<Object>
方法所期望的。