2011-03-28 8 views
1

50 개 이상의 속성이 포함 된 직원 클래스가 있습니다. 나는 윈도우 폼의 checkedboxlist에 PropertyInfo 클래스를 사용하여 모든 속성 이름을 표시합니다. 사용자는 보고서에 표시 할 둘 이상의 속성을 선택할 수 있습니다. 사용자가 선택한 이름, 제목, 전화, 주소를 가정하면 문자열로 모두 가져와 보고서에 표시해야합니다.런타임에 사용할 속성 결정

if 또는 switch로 쉽게 할 수 있지만 50 개 이상의 switch 문을 쓰는 대신 다른 작업을 수행하는 다른 방법이 있습니까?

답변

1

있습니다 (이것은 당신이 무엇을 의미하는지 경우)뿐만 아니라 값을 얻을 수 PropertyInfo을 사용할 수 있습니다 : 당신은 PropertyInfo 목록을 통해 선택한 속성을 반복하고 그 값을 얻을 이미 사용했습니다 수

 PropertyInfo propertyInfo = catalog.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy) 
      .Where(x => x.Name == propertyName).SingleOrDefault(); 
     object propertyValue = propertyInfo.GetGetMethod().Invoke(customer); 
1

확인란 목록에 표시 할 속성의 이름을 생성 할 때 해당 속성의 문자열 표현을 검색하는 식도 만듭니다. 그런 다음 점검 된 각 항목에 대해 현재 직원 인스턴스에 대해 표현식을 실행하십시오.

1

;

//Say you have a Props instance defined as Generic.List(Of PropertyInfo) 
//and an instance of your class named Inst 
string[] selectedProps = {"Prop1","Prop2"}; 
string ret = ""; 
foreach (PropertyInfo pi in Props.Where(p => return selectedProps.Contains(p.Name))) { 
    ret &= ret & pi.GetValue(Inst,Nothing); 
} 

면책 조항 :이 테스트, 또는 컴파일하지만, 필요한 무슨의 좋은 아이디어를 줄 것이다되지 않습니다.

관련 문제