2012-06-20 4 views
0

쉽게 찾을 수없고 편집 할 수없는 기존 코드의 로직을 테스트하고 있지만 코드에있는 객체에는 null이 포함 된 객체가 50 개 이상 있습니다 이유가 무엇이든지. 내가 뭘 찾고 있어요 : 내 테스트 코드에서 반사를 사용하여, 내가 테스트하고있는 클래스의 모든 내부 개체를 통과하고 그 개체가 null 인 경우 그냥 인스턴스화.리플렉션을 사용하여 객체 내부에서 컨트롤 속성을 인스턴스화합니다.

Type ucApprovedType = ucApproved.GetType(); 
System.Reflection.FieldInfo[] fieldInfo = ucApprovedType.GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); 

foreach (System.Reflection.FieldInfo ucFieldInfo in fieldInfo) 
{ 
    Control control = ucApproved.FindControl(ucFieldInfo.Name); 

    if (control == null) 
     control = new Control(); 

    //Set instantiated control back to ucApproved item 
} 

내가 위에서 실행 해요 첫 번째 문제는 컨트롤이 다시는 null의 FindControl (ucFieldInfo.Name) 호출에서오고 있다는 것입니다 : 이것은 내가 지금까지 가지고있는 것입니다. 그런 다음 일단 내가 instatiated 컨트롤을 가지고, 내가 할 수 없어 이후 ucApproved 개체에 값을 설정하는 방법을 모르겠다 ucApproved.Controls[0] = control ControlCollection 읽기 전용이기 때문에.

답변

0

거의 다 왔지만 fieldInfo 객체를 직접 사용하여 문제의 객체를 쉽게 참조 할 수 있습니다. 이 시도 :

Type ucApprovedType = ucApproved.GetType(); 
System.Reflection.FieldInfo[] fieldInfo = ucApprovedType.GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); 

foreach (System.Reflection.FieldInfo ucFieldInfo in fieldInfo) 
{ 
    //get its current value 
    Control control = ucFieldInfo.GetValue(ucApproved) as Control; 

    if (control == null) 
    { 
     control = new Control(); 

     //Set instantiated control back to ucApproved item 
     ucFieldInfo.SetValue(ucApproved, control); 
    } 
} 

은이 루프에서 얻을 유일한 필드 Control 필드가있는 경우와 같이이 정말에만 작동 경고. 그렇지 않으면 필터 문을 추가해야합니다.

if (ucFieldInfo.FieldType.IsInstanceOfType(typeof(Control)) || ucFieldInfo.FieldType.IsSubclassOf(typeof(Control))) 

또는 이와 유사한 것.

------- ucApproved 사용자 정의 사용자 정의 컨트롤한다는 가정하에 다른 옵션 -----------

, 왜 단지 내부의 공공 기능을하지 컨트롤을 생성 할 컨트롤 클래스입니다.

예, "쉽게 갈 수없고 편집 할 수 없다"고 대답했습니다. 나는 심지어 그 개념을 이해한다. 그러나 쉬운 대답입니다. ucApproved.CreateControls();으로 전화하면 훨씬 더 깔끔한 솔루션이됩니다.

+0

이것은 훌륭하게 작동했습니다! (여러 유형의 컨트롤에 대한 자격이 있음) 감사합니다. – IWriteApps

관련 문제