2012-05-24 1 views
2

속성 이름별로 객체를 탐색하여 속성 값을 가져올 수있는 메서드가 필요합니다.C#의 객체 속성 트리를 트래버스하기위한 라이브러리

좀 더 구체적으로 말해서 "Model.Child.Name"과 같은 문자열이 있는데이 메서드가 객체를 가져 와서 프로그래밍 방식으로 찾을 수있는 값을 object.Model.Child.Name으로 가져 오도록합니다.

나는이 작업을 수행하는 유일한 방법은 리플렉션 (Reflection)을 사용하는 것이지만이 코드는 혼자 쓰고 싶지 않다는 것을 알고 있습니다. 함정이 있다고 생각하기 때문입니다. 또한, 나는 그것이 다소 일반적인 작업이라고 생각한다.

C#과 같은 알고리즘의 잘 알려진 구현이 있습니까?

+0

Reflection은 btw 방법이지만, 이것을 설정하면 JSON 또는 XML로 직렬화를 사용하고 문자열 키 값을 사용하여 출력 노드에 액세스하는 옵션이 있습니다. –

+1

시작해야합니다 : http://www.codeproject.com/Articles/14560/Fast-Dynamic-Property-Field-Accessors. Reflection 및 Reflection.Emit을 사용하여 문자열 이름을 사용하여 접근자를 작성하고 리플렉션의 기존 성능 문제를 완화합니다. 도트 표기법을 지원하지 않지만이 코드를 사용하여 쉽게 구현할 수 있습니다. –

답변

1

문자열, 파일에 덤프 ObjectDumper 쓰기가 어렵지 않다. 네, 몇 가지 함정이 있지만, 함정을 아는 것이 좋습니다.

알고리즘은 간단하며 트리 구조를 탐색합니다. 각 노드에서 원시 시간 (int, string, char 등)이 아닌 경우 기본 값 (primitive value)을 검사 한 다음 하나 이상의 기본 요소가 있으며 기본 요소로 넘어갈 필요가있는 구조를 검사합니다.

함정은 nulls, nullable 유형, 값 대 참조 유형 등을 다룹니다. 모든 개발자가 알아야 할 사항.

관련 문제