Итак, для двух разных пространств имен у меня есть запись класса. Я хотел бы вернуть соответствующий, основанный на типе, который передается. Чтобы попытаться сделать это, я попытался это сделать, но «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 (до тех пор, пока имя == «Запись»).
Первоначально я пытался Т для всего, и он не выдавал никаких сообщений об ошибках, но я хочу убедиться, что типы ввода и вывода могут быть разных типов.
Edit:
Я не may've объяснил полностью.
Я создаю аннотацию данных для раздвоенной записи (технически 3 человека должны иметь возможность назначать эту запись в любой момент времени из-за трех различных процессов, выполняемых на них. Они согласовываются после 3 процессы завершены). Поэтому namespace1 - это один проект (не в смысле Visual Studio), а namespace2 - другой. В namespace1 у вас есть ImportedRecord1 и в namespace2 ImportedRecord2 (оба отдельных проекта с отдельными свойствами, хотя более или менее служат той же цели). Namespace1 и Namespace2 имеют тип записи, относящийся к ImportedRecord для этого конкретного пространства имен, который затем будет преобразовывать в 3 "субректоры" другого типа (в основном импортированная запись этого проекта, но с полем, относящимся к одному из трех процессов).
Итак, вы хотите, чтобы компилятор вычислил возвращаемый тип вашего метода на основе того, что метод делает во время выполнения? Боюсь, это просто невозможно. – svick
Таким образом, не было бы способа передать в Namespace1.ImportedRecord1 как общий и строку «Запись» и было возвращено новое пространство имен Namespace1.Record? Это облом, но я ценю головы. – Robert
Как тип времени компиляции? Нет. Как тип времени выполнения возвращаемого объекта? Да. – svick