我提供了一个基类,包含以下字段:
public class OrdersModel
{
public int orderType {get; set;}
public int status {get; set;}
public int accountType {get; set;}
}
我想创建一个可以覆盖这些字段的新类,每个字段将返回一个字符串,具体取决于数据库发回的int值。例如:
public class OrdersViewModel : OrdersModel
{
public int orderType {
get {
case: (orderType == 0)
return ("Standard Shipping");
break;
case: (orderType == 1)
return ("Express Shipping");
break;
default:
return ("Value Shipping");
set{}
}
}
}
不幸的是,我收到错误:代码无法缓存或无法将类型字符串转换为返回类型int
我可以将这些字段转换为基类中的字符串,但父类正在其他地方使用。我只想让继承的类显示人类可读的值。
我的问题如下:有没有办法可以强制转换或覆盖字段并使它们返回字符串而不是int?
谢谢
答案 0 :(得分:0)
您只需更改返回类型即可覆盖,但您可以隐藏属性:
public class OrdersViewModel : OrdersModel
{
public new string orderType {
get
{
switch(((OrdersModel)this).orderType)
{
case(0):
return ("Standard Shipping");
case (1):
return ("Express Shipping");
default:
return ("Value Shipping");
}
}
set{ /* reverse mapping from string to int */ ;}
}
}
但是从模型继承视图模型通常不是最佳选择。它可能似乎就像你在减少重复一样,但像AutoMapper
这样的工具可以很容易地从一个类映射到另一个类,并且你不会污染你的模型验证逻辑或必须覆盖/隐藏您希望在视图模型中略微不同的属性。考虑封装或映射。我也更喜欢映射,因为它将viewmodel与特定的模型实现分离。