Допустим, у меня есть абстрактный базовый класс, используемый для полиморфизма, и мне нравится писать метод для преобразования одного производного типа в другой, но я не знаю ни одного из производных типов во время компиляции , Я считаю, что рефлексией будет правильный путь для решения этой проблемы, но я не уверен, каким правильным способом ее реализовать. Вот где я сейчас застрял.Преобразование между неконструированными производными типами во время выполнения
Public Static BaseClass ConvertTo(BaseClass bc, Type type) {
//bc is currently DerivedClass1 which implements IConvertable
//type is currently DerivedClass2
//Trying to convert DerivedClass1 to DerivedClass2
return (BaseClass)ChangeType(bc, type);
}
Этот метод преобразует DerivedClass1 в DerivedClass2, но я должен был Реализовать IConvertable интерфейс для DerivedClass1 для того, чтобы работать, что я недоволен, потому что речь идет о 15 ненужных методов, которые я должен реализовать.
Есть ли более элегантный способ решить эту проблему, что ближе к компиляции времени? Тот, в котором метод либо преуспел, либо выбросил исключение времени выполнения в зависимости от того, был ли DerivedClass1 включен Оператором Cast DeringsClass2. Что-то еще:
Public Static BaseClass ConvertTo(BaseClass bc, Type type) {
//First down cast it to bc, then sideways cast it to type.
return (type)((bc.GetType())bc)
}
Итак, вы собираетесь выполнять работу в пользовательском преобразовании, и вы просто хотите найти это и выполнить его с помощью отражения? –
Вы уверены, что не пытаетесь копировать подобные структуры? Automapper может быть более полезным, что бы вы ни пытались сделать – Arjang