使用FileHelpers将List <t>转换为csv文件

时间:2015-06-12 17:52:21

标签: c# .net filehelpers

我有一个类似的课程

public class MyObject
{
    public string Name { get; set; }
    public string Location {get; set; }
}

然后将其转换为上面带有数据的类型列表。我想使用filehelpers将我的列表对象转换为csv字符串。

目前我正在这样做

    List<MyObject> objList = new List<MyObject>();

    //populate objList here
    //..
    //..

    var feng = new FileHelperEngine<List<MyObject>>();
    string str1 = feng.WriteString(new MyObject[]  { objList });

这给了我一个错误

Argument 1: cannot convert from 'MyObject[]' to
 'System.Collections.Generic.IEnumerable<System.Collections.Generic.List<MyObject>' 

另一个错误是:

Cannot implicitly convert type
'System.Collections.Generic.List<MyObject>'
to 'MyObject'

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

如果类型已知且非常简单,则可以在没有任何外部库的情况下执行此操作:

File.WriteAllLines("output.csv",list.Select(
    obj => String.Join(", ", new Object[] {obj.Name, obj.Location, ...})
));

答案 1 :(得分:2)

而不是:

var feng = new FileHelperEngine<List<MyObject>>();
string str1 = feng.WriteString(new MyObject[]  { objList });

你想要这个:

var feng = new FileHelperEngine<MyObject>();
string str1 = feng.WriteString(objList);

答案 2 :(得分:0)

编译错误使用以下语法:

new MyObject[]  { objList };

大括号是collection initializer所谓的,它期望集合的个别元素。由于您正在制作MyObject数组,因此初始值设定项需要单个对象,但您需要传递集合。如果将来你真的需要一个数组(而不是任何其他IEnumerable类型),只需调用LINQ&#39; s .ToArray()

正如其他人所指出的那样,.WriteString正在寻找任何IEnumerable,所以只需传递现有的List<MyObject>即可。此外,FileHelperEngine<T>的泛型类型期望您要写出的类型,它只是MyObject而不是集合。

var feng = new FileHelperEngine<MyObject>();
string str1 = feng.WriteString(objList);