1

我使用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吗?

如何删除此警告?

谢谢你,米格尔

4

1 回答 1

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。

于 2014-03-09T16:02:25.977 回答