CsvHelper.CsvWriter.WriteRecords <t>(System.Collections.Generic.IEnumerable <t>)'已过时</t> </t>

时间:2014-03-09 14:51:02

标签: c# csvhelper

我使用CSVHelper获得以下代码:

IList<User> users = _service.GetUsers();
enter code here
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
using (CsvWriter csv = new CsvWriter(writer)) {
  csv.WriteRecords(reply.Users);
}

我收到警告说:

'CsvHelper.CsvWriter.WriteRecords<T>(System.Collections.Generic.IEnumerable<T>)' is obsolete: 'This method is deprecated. Use WriteRecords( IEnumerable records ) instead.' 

但这不是我用IList做的事情吗?

如何删除此警告?

谢谢你, 米格尔

1 个答案:

答案 0 :(得分:3)

WriteRecords(IEnumerable)方法适用于在编译期间分配给方法调用而不是运行时类型的编译时类型。通常这两个行为的结果是相同的,但是它有一些继承问题:如果你尝试从基类型(比如IWillBeCsv接口)创建csv文件会发生什么,但是保存这些实例的集合具有描述的其他属性在基础界面?它们不会仅序列化界面中定义的那些。

检查源代码:

[Obsolete("This method is deprecated and will be removed in the next major release. Use WriteRecords( IEnumerable records ) instead.", false)]
public virtual void WriteRecords<T>(IEnumerable<T> records)
{
  this.CheckDisposed();
  this.WriteRecords((IEnumerable) records);
}

如果要调用泛型方法,内部逻辑会将集合拆分为绝对基本集合类型,以从存储的对象中获取最直接的运行时类型信息。

如何删除邮件?

using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
using (CsvWriter csv = new CsvWriter(writer)) {
    csv.WriteRecords(_service.GetUsers() as IEnumerable);
}

将列表转换为IEnumerable。