2014-02-28 5 views
0

이것은 지금 당황 스럽습니다. 다른 클래스를 포함하는 클래스가 있습니다. 첫 번째 클래스에서 두 번째 클래스의 typeof를 찾은 다음 루프 필드의 값을 가져와야합니다. 이 유효한 필드 아니므로클래스 내의 필드 값을 가져옵니다.

아래의 코드는 분명히 선

Console.WriteLine(field.GetValue(mFC.field.secondClassString));   

에 실패합니다. 아마도 나는이 잘못된 방향으로 가고 있습니다 - 어떤 생각입니까?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Reflection; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyFirstClass mFC = new MyFirstClass(); 

      FieldInfo[] fI = mFC.GetType().GetFields(); 

      foreach (FieldInfo field in fI) 
      { 
       if (field.FieldType.Name == "MySecondClass") 
       { 
        //get the fields 
        Console.WriteLine(field.GetValue(mFC.field.secondClassString));      
       } 
      } 
     } 
    } 

    class MyFirstClass 
    { 
     public MySecondClass firstMSC = new MySecondClass("First Instance"); 
     public MySecondClass secondMSC = new MySecondClass("Second Instance"); 
     public string firstClassString = "I'm from the first class"; 
     public int firstClassInt = 5; 
    } 

    class MySecondClass 
    { 
     public MySecondClass(string input) 
     { 
      this.secondClassString = input; 
     } 
     public string secondClassString; 
     public int secondClassInt = 10; 
    } 

} 

답변

1

((MySecondClass) field.GetValue (mFC)). secondClassString;

콘솔 내부에서 사용하십시오.

+0

그 중 하나! 내부 클래스에 캐스팅이 필요했습니다. 덕분에 – user1156000

+0

나는 표면 전체에 다시 던지려고 노력했다. 어떻게해야합니까? MySecondClass newClass = (MySecondClass) .field ..... – user1156000

+1

MySecondClass c = (MySecondClass) field.GetValue (mFC); 당신은 이것을 할 수 있습니다 – Bunny

2

field.GetValue 필드 값을 가져 오는 인스턴스를 허용합니다.
귀하의 경우에는 field.GetValue(mFC)이어야합니다.

field.FieldType.Name == "MySecondClass" 또한 형식 이름을 변경하면 코드가 손상 될 수 있으므로 형식을 확인하는 가장 좋은 방법은 아닙니다. field.FieldType == typeof(MySecondClass)으로 바꾸는 것이 좋습니다.

관련 문제