그래서 두 개의 다른 네임 스페이스에 대해 클래스 레코드가 있습니다. 나는 전달하려고하는 타입에 기반을 둔 적절한 것을 돌려주고 싶다. 이것을 시도하기 위해, 나는 이것을 시도했지만, "T2"는 올바르지 않다. 이것을 어떻게 할 수 있습니까?하나의 제네릭 형식 매개 변수, 반환 형식에 대해 다른 일반?
public T2 GetGeneratedType<T1>(string name) where T1 : class where T2 : class
{
var type = typeof(T1);
var generatedName = type.AssemblyQualifiedName.Replace(type.Name, name);
return (T2)Activator.CreateInstance(Type.GetType(generatedName));
}
나는이 (분명히, 컴파일되지 않습니다) 테스트를하지 않은,하지만 내가 어떻게이 일을해야합니까 그래서에서 Namespace1.SomeClass를 전달하면, 나는 Namespace1.Record을 얻을 경우 내가 통과 것을 Namespace2.SomeOtherClass에서 Namespace2.Record를 얻습니다 (name == "Record"만큼 오래).
처음에는 모든 항목에 대해 T를 시도했지만 오류 메시지를 표시하지는 않았지만 입력 및 출력 유형이 다른 유형으로되어 있는지 확인하려고합니다.
편집 :
전적으로 설명하지는 않았습니까?
포크 레코드에 대한 데이터 주석을 작성 중입니다. (기술적으로 3 명의 독자적인 프로세스가 수행되기 때문에 3 명이이 레코드를 지정할 수 있어야합니다. 프로세스가 완료됩니다. 따라서 namespace1은 하나의 프로젝트이고 (Visual Studio의 의미는 아닙니다) namespace2는 또 다른 프로젝트입니다. 네임 스페이스 1에는 ImportedRecord1이 있고 네임 스페이스 2에 ImportedRecord2가 있습니다 (둘 다 별도의 속성을 가진 별도의 프로젝트이지만 다소간 동일한 목적을 제공함). Namespace1과 Namespace2는 모두 해당 네임 스페이스에 대한 ImportedRecord와 관련된 레코드 유형을 가지며,이 레코드 유형은 다른 유형의 3 "하위 레코드"로 분기됩니다 (기본적으로 해당 프로젝트의 가져온 레코드이지만 3 개의 프로세스 중 하나와 관련된 필드가 있음)).
그래서 컴파일러가 메서드가 런타임에 수행하는 작업을 기반으로 메서드의 반환 형식을 파악하기를 원하십니까? 나는 그것이 불가능하다는 것에 두려워합니다. – svick
그래서 Namespace1.ImportedRecord1을 일반 문자열로 전달하고 "Record"문자열을 전달하고 새로운 Namespace1.Record를 반환 할 방법이 없습니까? 그것은 파업이지만, 나는 머리를 고맙게 생각합니다. – Robert
컴파일 시간 유형은? 반환 된 객체의 런타임 유형은? 예. – svick