2009-04-09 4 views
2

데이터 레이더를 순환하여 특정 유형의 객체로드를 생성하지만 데이터 객체의 값을 객체 이름으로 사용한다고 가정 해 보겠습니다.문자열에서 객체 이름을 만드십시오.

String "string_" + <value from datareader> = new String(); 

그래서 값 TEMP1, 내가 예를 들어, 형식 문자열의 3 개 새로운 객체를했을 DataReader가 나오는 & TEMP3 TEMP2이 있다면

string_temp1 
string_temp2 
string_temp3 

데이터 렌더러의 이름으로 개체를 만들려면 어떻게해야합니까? 아니면 더 좋은 방법이 있습니까? 이 일에

var map = new Dictionary<String, String>(); 
map[...] = new String(); 
// ^
// | 
// +---- substitute with whatever naming scheme you deem suitable 
+0

나는 이것을 수행 할 필요가있다. 런타임에만 정의 된 변수 이름을 가진 객체 유형 (문자열이 아님) 만 필요하다. 레거시 웹 서비스에 대한 DataContractSerializer를 만족시키기 위해서는 이것이 필요합니다. 요소 이름도 식별자입니다. 나는 아래 답변 중 어떤 것도 OP 질문을 만족시키지 못한다고 생각합니다. – barrypicker

답변

11

는 오히려 반사를 사용하는 것보다, 나는 당신이 객체가 그 값에 부여 할 이름을 매핑하는 Dictionary를 사용하는 것이 더 쉬울 거라고 생각 . 값에서 NAME 변수를 만들면 코드가 컴파일 타임에 컴파일되고 런타임에 변수 이름을 설정하려고하기 때문에 코드에서이 변수를 참조 할 방법이 없습니다.

컴파일러가 IL에 매핑하고 결국에는 JIT에 올바르게 매핑 할 수 있다는 것을 기억하십시오. 이것이 난독 화가 작동하는 이유입니다. 대부분의 난독 화자가하는 주요 작업 중 하나는 모든 변수 이름을 아주 짧고 의미없는 이름으로 뒤섞는 것입니다. 이것은 런타임 동작에 영향을 미치지 않습니다. 이름은 일단 컴파일되면 의미가 없습니다.

나는 John Feminella의 접근 방식 또는 이와 유사한 방법을 권장합니다.

+0

이것은 확실히이 문제에 대한 좋은 접근 방법입니다. – Statement

+0

쓸모없는'string_' 접두어를 죽이십시오. –

+0

이것은 확실히가는 길입니다. :) – ibz

2

작은 값이 될 것이다 :

관련 문제