프로페터 혹은 필드를 반복문으로 호출에 관한 질문입니다.

아래소스는 Getter , DTO, VO 등 으로 불리우는 클래스의 Getter 필드값을
출력하는 겁니다. DOCS 등에서 가져와 붙여넣기 해서 좀 고친게 있긴 하지만…
그런데 실행해보면 method.invoke(T, obje~); 부분에서 Exception 이 나옵니다.
이부분은 != typeof(void) 이므로 getter 값을 출력하는 것인데 왜 예외오류가 나오는지
알고 싶습니다. 해당 Vo Class에서 getter 혹은 필드값을 반복문으로 호출할 수 있는 방법은
이것밖에 없는 건가요?

using System;
using System.Reflection;

namespace Vardump
{
   public class Progrm
   {
       static void Main(string[] args)
       {
           Dd dd   = new Dd();
           dd.PropertyGet();
       }
   }

    public class Dd
    {
        public void PropertyGet()
        {
            Type T = typeof(Vo);
            PropertyInfo[] propInfos   = T.GetProperties();

            for(int i=0; i<propInfos.Length; i++)
            {
                PropertyInfo info = propInfos[i];
                MethodInfo[] methods = info.GetAccessors(); // getter , setter
                Console.WriteLine(">>>>" + info.Name);
                for(int j = 0; j < methods.Length; j++)
                {
                    MethodInfo method = methods[j];
                    if (method.ReturnType != typeof(void))
                    {
                        Console.WriteLine(">>>" + method.Invoke(T, new object[] {}));

                    }

                }

            }

        }
    }
    

}

위에서부터 첫번째 for문에 열린 중괄호는 원래 없는건가요? 아니면 오타때문에 사라진건가요?
주신 소스 그대로 넣었을때에는 없어서 오류가 출력되네요.

Docs에서 가져온거라면 참고하신 자료 링크 부탁드려요.

  • 추가
    image
    이와 같은 오류가 출력되는데 같은 증상인가요?
    질문 하신 것을 보면 반복문에서 생기는 오류라고 말씀하시는 걸로 이해했는데
    혹시 반복문이 아닌 한 인덱스만 지정하여 출력 한다면 정상 작동하나요?

  • 해결
    method.Invoke에서 오브젝트 타입을 T로 하는 것이 아닌 new Vo 로 사용하면 됩니다.

image
image

3개의 좋아요