从列表<t> </t>创建类成员的CSV

时间:2014-08-11 20:01:49

标签: linq list csv generics

我有一个包含int和字符串的Simple Struct列表。

STRUCT:

public struct ErrorType
    {
        public int RowNumber;
        public int ColumnNumber;
        public string ErrorMessage;
    }

On我的方法返回这些结构的列表。 我想将列表中的每个成员转换为其字符串形式,并用逗号分隔,以便List现在是一个字符串数组。我可以编写一个函数来手动执行此操作,但我更愿意使用linq来获得更清晰的解决方案。

拥有字符串数组我将使用

将其写入文件
 string path = @"c:\temp\MyTest.txt";

    // This text is added only once to the file. 
    if (!File.Exists(path))
    {
        // Create a file to write to.

        List<ErrorType> ErrorTypesList = GetErrors();

        //do some work to iterate over the members and do a string.join after 
        string[] ErrorListArray = ErrorTypesList.foreach( e => { });
        File.WriteAllLines(path, createText);
    }

是否有人建议如何填写foreach,以便以ToString形式返回每个成员后跟逗号?

2 个答案:

答案 0 :(得分:1)

看起来你想要这样的东西:

string[] ErrorListArray = ErrorTypesList
     .Select(e => string.Join(",", e.RowNumber, e.ColumnNumber, e.ErrorMessage))
     .ToArray();

答案 1 :(得分:1)

你能够使用LINQ进行属性迭代的唯一方法是,如果你正在使用反射,除非你必须这样做,否则你不应该这样做(它真的没有&#39 ;看起来像你这样做。)

尽管如此,你所做的最好的事情仍然不是太糟糕。

var rows = ErrorTypesList
           .Select(c => "\"" + string.Join("\",\"", c.RowNumber, c.ColumnNumber, c.ErrorMessage) + "\"");

File.WriteAllLines(path, rows);

我冒昧地将字段放在引号中,您可能会也可能不会想要,但是很容易修复该代码以执行您想要的内容。您可能还想添加一些转义逻辑,等待c.ErrorMessage可能包含的内容。

如果您对此更加满意,也可以使用string.Format,但这并没有真正发挥作用。

var rows = ErrorTypesList
           .Select(c => string.Format("\"{0}\", \"{1}\", \"{2}\"", c.RowNumber, c.ColumnNumber, c.ErrorMessage));