Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将类对象的System.Reflection.PropertyInfo名称提取为csv文件的第一行_C#_.net_Reflection_Getproperties - Fatal编程技术网

C# 如何将类对象的System.Reflection.PropertyInfo名称提取为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; }

在从数据源创建实际的通用列表之前,我正在尝试使用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 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);

您尝试搜索的字段是实例字段,不是静态的

哇,你们真是太棒了。非常感谢。哇,你们太棒了。非常感谢。你帮助我真是太好了。非常感谢-工作做得很好。你帮助我真是太好了。非常感谢,做得很好。