1

データ ソースから実際の汎用リストを作成する前に、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 ループはすぐに終了します。また、クラスに定数セパレーターを配置しましたが、それをフィールドセパレーター値として (「列」名ではなく) 使用したいと考えています。

このようなものを機能させることができれば、クラス内のプロパティの序数の位置が一貫して維持されると想定しています。

データ ソースからを作成する残りのコードは機能しますList<DocMetaData>が、この「最初の行」のものを追加したいと思います。

これについて助けてくれてありがとう。

4

3 に答える 3

3

BindingFlags.Static静的メンバー (public static) のみが生成されるため、使用しないでください。BindingFlag.Instanceプロパティはインスタンス メンバーであるため、代わりに使用してください。

于 2011-07-04T20:05:44.803 に答える
3

私はあなたがしなければならないと思います

columns = typeof(DocMetaData).GetProperties(BindingFlags.Public |
                                                      BindingFlags.Instance);

検索しようとしているinstanceフィールドは、そうでないフィールドですstatic

于 2011-07-04T20:12:01.407 に答える
2

Instance DocMetaData`BindingFlags.Static. The properties in your静的ではありません。

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());
}
于 2011-07-04T20:07:33.993 に答える