К сожалению, в c # вы не можете привести из базового типа к производному типу («downcasting»), потому что вы пытаетесь генерировать информацию (т.е. какое значение должно иметь ExtendedName?).
Лучше всего сделать это с помощью композиции - создайте конструктор на ProductExtendedViewModel
, который принимает ProductViewModel
:
public class ProductExtendedViewModel : ProductViewModel
{
public ProductExtendedViewModel()
{
}
public ProductExtendedViewModel(ProductViewModel viewModel)
{
Name = viewModel.Name;
Product = viewModel.Product;
}
public string ExtendedName { get; set; }
}
, который затем можно назвать:
var productModel = new ProductViewModel {Name = product.Name, Product = product};
var derived = new ProductExtendedViewModel(productModel);
Примечаниечто вы все еще можете преобразовать тип Derived обратно в его базовый тип, так как это приводит к потере информации:
var basetype = (ProductViewModel)derived;
Я считаю, что «Совет по устранению неполадок» из «При приведении из числа [...] "в этом случае - красная сельдь, и это всего лишь помощь в кастинге.