2011-07-04 2 views
1

생성하기 전에 System.Reflection을 사용하여 CSV 텍스트 파일의 열 머리글 정보의 첫 번째 행을 출력하려고합니다. 내 데이터 원본의 실제 generic 목록입니다. 다음 루틴에서 클래스 개체의 System.Reflection.PropertyInfo 이름을 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>을 만드는 나머지 코드는 작동하지만이 "첫 번째 행"항목을 추가하고 싶습니다.

감사합니다.

답변

3

나는 너희들이 최고입니다, 당신은 검색하려는 필드 instance 필드하지 static

+0

나를 도와 주셔서 정말 대단합니다. 대단히 감사합니다. 아름답게 일했습니다. –

3

BindingFlags.Static은 정적 멤버 (public static) 만 생성하므로 사용하지 마십시오. 속성이 인스턴스 멤버이므로 BindingFlag.Instance을 대신 사용하십시오.

+0

와우는

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

해야 할 가정합니다. 매우 감사합니다. –

2

BindingFlags.Static을 BindingFlags.Instance . The properties in your으로 대체해야합니다. DocMetaData는 정적이 아닙니다.

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()); 
}