C# 帮助转换通用列表<;T>;Excel电子表格
我正在尝试创建一个函数,该函数接受一个通用的C# 帮助转换通用列表<;T>;Excel电子表格,c#,excel,generic-list,C#,Excel,Generic List,我正在尝试创建一个函数,该函数接受一个通用的列表,并迭代该列表,返回一个excel文件字节[]。函数需要能够确定对象属性。因此,如果我传递一个列表,并且person具有属性first、last、age等,我需要能够确定属性名称,以便创建excel列标题,然后我需要迭代列表以将属性值分配给列单元格。有人能给我指出一些在通用函数中使用List的示例代码吗?那么,最简单的方法可能是 第二个链接将电子表格直接写入ASP.NET响应,这可以很容易地调整为返回字节[]。旁白:为了以已知顺序返回列:除了您创建
列表
,并迭代该列表,返回一个excel文件字节[]
。函数需要能够确定对象属性。因此,如果我传递一个列表
,并且person具有属性first、last、age等,我需要能够确定属性名称,以便创建excel列标题,然后我需要迭代列表以将属性值分配给列单元格。有人能给我指出一些在通用函数中使用List
的示例代码吗?那么,最简单的方法可能是
第二个链接将电子表格直接写入ASP.NET响应,这可以很容易地调整为返回字节[]。旁白:为了以已知顺序返回列:除了您创建的顺序之外,没有为成员定义的顺序。例如(): GetProperties方法不按特定顺序返回属性,如字母顺序或声明顺序。您的代码不能依赖于返回属性的顺序,因为该顺序是不同的 如果您不需要依赖顺序,反射或TypeDescriptor都可以;例如(注意这会写入TSV文本,而不是
byte[]
——我的解释是问题在于获取数据,而不是写入Excel):
static void WriteTsv(此IEnumerable数据,TextWriter输出)
{
PropertyDescriptorCollection props=TypeDescriptor.GetProperties(typeof(T));
foreach(PropertyDescriptor道具中的道具)
{
output.Write(prop.DisplayName);//头
输出。写入(“\t”);
}
output.WriteLine();
foreach(数据中的T项)
{
foreach(PropertyDescriptor道具中的道具)
{
输出.写入(prop.Converter.ConvertToString(
道具价值(项目));
输出。写入(“\t”);
}
output.WriteLine();
}
}
如果您需要订购,您需要:
- 传入(例如,作为
)参数字符串[]propertyNames
- 在属性上使用属性
- 使用字母顺序
TypeDescriptor
方法具有以下优点(优于GetType().GetProperties()
):
- 它适用于自定义对象模型(
,例如,如果使用DataView
)IList
- 您可以调整实现以提高性能,例如(如果您正在做这项工作,这将非常有用)
IEnumerable
:
public byte[] Process(IEnumerable input) {
foreach (var elem in input) {
foreach (PropertyInfo prop in elem.GetType().GetProperties()) {
Object value = prop.GetValue(elem, null);
// add value to byte[]
}
}
return bytes;
}
我认为Kevin所说的“…财产名称以便创建…”是“…财产名称以便我可以创建…”,而不是财产名称的排序列表:)哦!我感觉很慢。。。我将保持“原样”,因为我认为如果你每次都期望相同的结果,这仍然是一个有趣的观点。谢谢,谢谢,马克,这就是我要找的。
public byte[] Process(IEnumerable input) {
foreach (var elem in input) {
foreach (PropertyInfo prop in elem.GetType().GetProperties()) {
Object value = prop.GetValue(elem, null);
// add value to byte[]
}
}
return bytes;
}