我有一个 datagridview,它以 mvvm 方式绑定(bind)到可观察集合。 我试图弄清楚如何将集合写入 csv 文件。
我可以格式化 header 并将其放入,但不确定如何迭代一个集合,取出值并将它们放入带有逗号分隔的文件中。
这是我的类(class)
public class ResultsModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Phone { get; set; }
public string Username { get; set; }
public bool Sucess { get; set; }
public string MessageType { get; set; }
public string SenderMessageSent { get; set; }
public string SenderMessageReceived { get; set; }
}
它被加载到可观察集合中
最佳答案
这是一个通用的帮助器方法,它利用反射来获取对象集合中所有属性的值,并序列化为逗号分隔的值字符串。 (1 行 = 集合中的 1 个对象)
public static IEnumerable<string> ToCsv<T>(IEnumerable<T> list)
{
var fields = typeof(T).GetFields();
var properties = typeof(T).GetProperties();
foreach (var @object in list)
{
yield return string.Join(",",
fields.Select(x => (x.GetValue(@object) ?? string.Empty).ToString())
.Concat(properties.Select(p => (p.GetValue(@object, null) ?? string.Empty).ToString()))
.ToArray());
}
}
以及示例用法:
var oemResultsModels = new List<OemResultsModel>
{
new OemResultsModel
{
FirstName = "Fname1",
LastName = "LName1",
MessageType = "Type1",
Phone = 1234567,
SenderMessageReceived = "something1",
SenderMessageSent = "somethingelse1",
Sucess = true,
Username = "username1"
},
new OemResultsModel
{
FirstName = "Fname2",
LastName = "LName2",
MessageType = "Type2",
Phone = 123456789,
SenderMessageReceived = "something2",
SenderMessageSent = "somethingelse2",
Sucess = false,
Username = "username2"
}
};
using (var textWriter = File.CreateText(@"C:\destinationfile.csv"))
{
foreach (var line in ToCsv(oemResultsModels))
{
textWriter.WriteLine(line);
}
}
关于c# - 将 Observable 集合写入 Csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859574/