C# 리플렉션으로 Struct(구조체 / ValueType) 수정(Set) 하기

StackOverflow에 매우 좋은 답변으로 달려 있는 내용인데, C#에서 Reflection을 이용해서 구조체(Struct)의 맴버 변수를 Set(Get)하려고 하면 제대로 작동되지 않는다.

 

접근할 수 없는 이유는 Struct는 ValueType으로 Stack에 할당되어 있기에 Reflection 연산으로 접근 할 수 없기 때문이다.

 

이를 의도된 Boxing을 통해서 Heap영역으로 옮긴 후 Reflection을 사용하는 방법이다.

물론 이때 다시 맴버 변수 접근으로 값을 가져오려면 Unboxing을 해야한다.

 

생각보다 퍼포먼스 손해가 많아 보이니, 꼭 필요한 경우나 어쩔수 없는 최후의(?) 상황에서 사용을 하자

 

이해를 돕기 위한 예시 코드는 아래와 같다

 

 

* 코드가 제대로 안나오면 F5(새로고침)해보세요

* 의사코드이므로 컴파일 안될 수 있습니다.

* Ref.https://stackoverflow.com/questions/6608368/why-doesnt-reflection-set-a-property-in-a-struct

칼루
나만의 강의 2017. 6. 19. 15:42
,
Powerd by Tistory, designed by criuce
rss