2012-11-16 6 views
0

내가 그러나동적으로

public partial class DeleteThisStruct<TKey, TValue> 

가 있다고 가정하자 C#에서 문자열에서 제네릭 개체를 만들고, 내가 파일에서 문자열로 읽을 것 TKEY 및 TValue의 값은 (이미 그렇게 할 수있는 방법을 가지고, 예 : "MyNamespace.MyClass"및 "MyNamespace.MyClass2"

둘째 문제는이 개체를 인스턴스화해야하는 코드가 다른 프로젝트에서 호출되었지만 동일한 솔루션에서 호출된다는 점입니다. DeleteThisStruct가 ProjectB (ProjectA 참조에 포함되어 있음)에있는 동안 ProjectB에서 인스턴스화한다고 가정 해 보겠습니다.

제네릭을 사용하든 사용하지 않든 어떻게 동적으로 DeleteThisStruct를 인스턴스화하고 멤버 값을 얻을 수 있습니까?

+0

문자열은 무엇입니까? 아마도 직렬화 된 객체입니까? – zimdanen

+5

> "응? 그거 확실하니? –

+0

'ProjectB'에서 삭제 작업을 할 때'ProjectA'에 의해'DeleteThisStruct'가 이미 생성되도록 코드가 설정되어 있습니까? –

답변

1

http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx의 "일반 유형의 인스턴스 구성"절을 참조하십시오. 문자열을 기반으로 유형 객체를 검색해야하지만 일반적으로 "MyNamespace.MyClass"로는 필요한 유형 객체를 검색하기에 충분하지 않습니다. 어셈블리 이름이 없으면 mscorlib 어셈블리와 현재 어셈블리 (http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx)에서만 형식을 가져올 수 있습니다.

+0

그 예는 당신에게 객체를 줄 것입니다. 유용하게 사용하려면 캐스팅해야합니다. 그리고 여기서 문제가 발생합니다. 결과 개체 "o"를 DeleteThisStruct 에 캐스팅하는 방법 "TKey"및 "TValue"는 실제 문자열 형식이 아닌 간단한 문자열 값입니다. –

+0

무엇에 던지시겠습니까? 캐스팅 할 컴파일 타임에 알려진 유형이 없습니다. 어떤 코드를 쓸 것으로 예상합니까? 액세스 할 필요가있는 것을 노출하는 캐스팅 할 수있는 비 제네릭 기본 클래스를 정의하거나 리플렉션에 의지해야합니다. – fsimonazzi

+1

때때로 도움이되는 기술은 인스턴스화를 포함하여 필요한 모든 코드를 일반 매개 변수의 일반적인 방법으로 작성하는 것입니다. 제네릭 형식을 작성하고 인스턴스화하는 대신 일반 메서드에 대한 호출을 작성하고 리플렉션을 사용하여 호출합니다. 그때부터는 모두 단순한 코드 일 것입니다. – fsimonazzi