C# 如何将类对象的System.Reflection.PropertyInfo名称提取为csv文件的第一行
在从数据源创建实际的通用列表之前,我正在尝试使用System.Reflection为csv文本文件输出第一行列标题信息C# 如何将类对象的System.Reflection.PropertyInfo名称提取为csv文件的第一行,c#,.net,reflection,getproperties,C#,.net,Reflection,Getproperties,在从数据源创建实际的通用列表之前,我正在尝试使用System.Reflection为csv文本文件输出第一行列标题信息 public class DocMetaData { public const string SEPARATOR = "\t"; // horizontal tab is delimiter public string Comment { get; set; } public string DocClass { get; set; }
public class DocMetaData
{
public const string SEPARATOR = "\t"; // horizontal tab is delimiter
public string Comment { get; set; }
public string DocClass { get; set; }
public string Title { get; set; }
public string Folder { get; set; }
public string File { get; set; }
}
在以下例程中,我尝试循环遍历对象定义的属性,并将属性名称用作输出文件第一行的列名:
private void OutputColumnNamesAsFirstLine(StreamWriter writer)
{
StringBuilder md = new StringBuilder();
PropertyInfo[] columns;
columns = typeof(DocMetaData).GetProperties(BindingFlags.Public |
BindingFlags.Static);
foreach (var columnName in columns)
{
md.Append(columnName.Name); md.Append(DocMetaData.SEPARATOR);
}
writer.WriteLine(md.ToString());
}
foreach循环立即退出。此外,我在类中放置了一个常量分隔符,但我想将其用作字段分隔符值,而不是列名
我假设,如果我能得到这样的结果,类中属性的顺序位置将保持一致
从我的数据源创建列表的代码的其余部分可以工作,但我想添加第一行内容
谢谢你在这方面的帮助 不要使用BindingFlags.Static,因为它只生成静态成员public Static。请改用BindingFlag.Instance,因为您的属性是实例成员。不要使用BindingFlags.Static,因为这样只生成静态成员public Static。请改用BindingFlag.Instance,因为您的属性是实例成员。您应该将BindingFlags.Static替换为BindingFlags.Instance。yourDocMetaData`中的属性不是静态的
private void OutputColumnNamesAsFirstLine(StreamWriter writer)
{
StringBuilder md = new StringBuilder();
PropertyInfo[] columns;
columns = typeof(DocMetaData).GetProperties(BindingFlags.Public |
BindingFlags.Instance);
foreach (var columnName in columns)
{
md.Append(columnName.Name);
md.Append(DocMetaData.SEPARATOR);
}
writer.WriteLine(md.ToString());
}
应将BindingFlags.Static替换为BindingFlags.Instance。yourDocMetaData`中的属性不是静态的
private void OutputColumnNamesAsFirstLine(StreamWriter writer)
{
StringBuilder md = new StringBuilder();
PropertyInfo[] columns;
columns = typeof(DocMetaData).GetProperties(BindingFlags.Public |
BindingFlags.Instance);
foreach (var columnName in columns)
{
md.Append(columnName.Name);
md.Append(DocMetaData.SEPARATOR);
}
writer.WriteLine(md.ToString());
}
我想你必须这么做
columns = typeof(DocMetaData).GetProperties(BindingFlags.Public |
BindingFlags.Instance);
您试图搜索的字段是非静态的实例字段我想您必须这样做
columns = typeof(DocMetaData).GetProperties(BindingFlags.Public |
BindingFlags.Instance);
您尝试搜索的字段是实例字段,不是静态的哇,你们真是太棒了。非常感谢。哇,你们太棒了。非常感谢。你帮助我真是太好了。非常感谢-工作做得很好。你帮助我真是太好了。非常感谢,做得很好。