article search result of 'tweener' : 1

  1. 2010.12.06 [c#] 익명타입의 (열거)배열 (71)

[c#] 익명타입의 (열거)배열

 

 

생각에 시작은 이러하다 .

 

 

예를 들어 AS3에 Tweener 의 일반적인 사용법을 보면

 

Tweener.to( targetObject , 1 , { x : 100 , y : targetObject.y + 100 , rotation : 100 , scale : 1.2 }) ;

Tweener.to( ColorMatrix , 2 , { r : 2.32 , g : 32.12 , b : –42.01 , a : 0.5 });

대부분이 요러한 모양이다 .

 

첫째 줄을 해석하면 ,

 

“targetObject 를 1초 동안 x좌표를 100으로 , y 좌표를 100만큼더 , 회전을 100도 , 스케일을 20% 키워라.”

 

가 되겠고 ,

 

“둘째 줄은 컬러매트릭스를 2초동안 , 빨강을 2.32 , 초록을 32.12 , 파랑을 –42.01 , 알파를 50% 만큼 해라 . “

 

이처럼 짧고도 가독성 있는 코드를 사용한다 .

 

이처럼 C# 에서 도 비교적 짧고 가독성 있는 트윈 클래스를 만들기 위해 , { , } 에 있는 속성들을 취합하여 열거하는 기능이

필수적으로 필요 하다.

C# 에서 이와 가장 사용성으로 비슷한 것은 익명 메서드 이고 이를 취합하여 적절히 이용하려 한다.

그러나 ..

익명타입들을 배열이나 컬렉션에 넣기 위해 Object 로 캐스팅 해버리면 익명 타입안에 속성에 접근을 할수 없다.

 

 

이것은 분명 동적성향을 많이 가지고 있는 AS3 의 Object 와 다른것이다.

 

하지만 불가능한것은 아니니 ,,

 

해답은 리플렉션을 이용하는것이다.

 

 

 

          //
          // 기본
            //

            
            //익명타입 생성
            var a = new { q1 = 123 , q2 = 4345};
            
            //타입추출
            Type t = a.GetType();

            //GetProperties는 PropertyInfo라는것의 배열 형태이다.
            PropertyInfo[] pi = t.GetProperties();

            //루프
            foreach (PropertyInfo p in pi)
            {
                //출력! 
                Console.WriteLine(p.Name + "   " +p.GetValue(a , null));
            }




          //
          // 응용
            //


            //오브젝트 배열 생성
            List<Object> list = new List<object>();

            //익명타입�� 추가 (Add)
            list.Add(new { a1 = 123, a2 = 234 });
            list.Add(new { b1 = 345, b2 = 567 });

            //list를 foreach 루프로 돌리고..
            foreach (Object o in list)
            {
                //타입을 뽑아낸다.
                Type ot = o.GetType();

                //ot 안에 GetProperties는 PropertyInfo라는것의 배열 형태이다.
                //역시 foreach 루프
                foreach (PropertyInfo p in ot.GetProperties())
                {
                    //출력 ~
                    Console.WriteLine("-> " +p.Name + "   " + p.GetValue(o , null));
                }
            }

 

 

이로서 익명타입을 열거 할 수 있게 되었다.
참고 :: http://stackoverflow.com/questions/1203522/how-to-access-property-of-anonymous-type-in-c

Yamecoder 야매코더_
C# 2010.12.06 17:59
Powerd by Tistory, designed by criuce
rss