Как указывалось во многих ответах, вы не можете опускать руки, что имеет смысл.
Однако, в вашем случае, SomeDerivedClass
не имеет свойств, которые будут «отсутствовать». Таким образом, вы можете создать метод расширения следующим образом:
public static T ToDerived<T>(this SomeBaseClass baseClass)
where T:SomeBaseClass, new()
{
return new T()
{
BooleanEvaluator = baseClass.BooleanEvaluator,
GetBaseClassName = baseClass.GetBaseClassName
};
}
То есть вы не используете кастинг, просто конвертируете:
SomeBaseClass b = new SomeBaseClass();
SomeDerivedClass c = b.ToDerived<SomeDerivedClass>();
Это действительно работает, только если все данные в базовом классе представлены в виде читаемых и доступных для записи свойств.