我有以下课程:
public class Cmp
{
public List<Tuple<string, string>> Hdd { get; set; }
public string Cpu { get; set; }
public string MonitorModel { get; set; }
public List<Tuple<string, string>> OpticDriver { get; set; }
}
我也使用此代码转换List<Cmp>
为 CSV:
public static void WriteToCsv<T>(IEnumerable<T> data)
{
var strBuilder = new StringBuilder();
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
foreach (PropertyDescriptor prop in props)
{
strBuilder.Append(prop.DisplayName); // header
strBuilder.Append(",");
}
strBuilder.AppendLine();
foreach (T item in data)
{
foreach (PropertyDescriptor prop in props)
{
strBuilder.Append(prop.Converter.ConvertToString(
prop.GetValue(item)));
strBuilder.Append(",");
}
strBuilder.AppendLine();
}
File.WriteAllText(@"C:\list.csv", strBuilder.ToString());
}
只是想知道如何迭代Hdd
和OpticDriver
里面的属性WriteToCsv<T>
。目前的结果是这样的:
Hdd Cpu MonitorModel OpticDriver
(Collection) CPU1 Monitor1 (Collection)
(Collection) CPU2 Monitor2 (Collection)
(Collection) CPU3 Monitor3 (Collection)
我希望它是这样的:
Hdd Cpu MonitorModel OpticDriver
Hdd1-Hdd2 CPU1 Monitor1 Disk1-Disk2
Hdd1-Hdd2 CPU2 Monitor2 Disk1-Disk2
Hdd1-Hdd2 CPU3 Monitor3 Disk1-Disk2
将值转换为List<Tuple<string,string>>
与其他属性不同的处理方式
foreach (PropertyDescriptor prop in props)
{
var value = prop.GetValue(item);
if(value is List<Tuple<string, string>> tupleList)
{
string tupleString = ConvertTupleListToString(tupleList);
strBuilder.Append(tupleString);
}
else
{
strBuilder.Append(prop.Converter.ConvertToString(value));
}
strBuilder.Append(",");
}
与其使用泛型,不如List<Tuple<string,string>>
考虑使用您自己的类似 List 的类型和自定义ToString()
实现,这将返回您想要的任何内容。
public class HddInfoList : List<Tuple<string, string>>
{
public HddInfoList(IEnumerable<Tuple<string, string>> collection) : base(collection)
{
}
public override string ToString()
{
//For example return first items of tuple separated by '-'
return string.Join("-", this.Select(m => m.Item1));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句