【问题标题】:Trying to convert int fields to string inside a inherited class尝试将 int 字段转换为继承类中的字符串
【发布时间】:2015-12-05 16:14:54
【问题描述】:

我有一个提供给我的基类,其中包含以下字段:

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?

谢谢你

【问题讨论】:

  • 枚举在这里也很有用。
  • @DmitryBychenko 为什么不需要休息?
  • @Kirk 因为你是returning,所以break 永远无法到达。
  • 哦,我明白了。非常感谢。

标签: c#


【解决方案1】:

你不能覆盖仅仅通过改变返回类型,但是你可以隐藏一个属性:

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 这样的工具可以很容易地从一个类映射到另一个类,并且您不会用验证逻辑污染您的模型或必须覆盖/隐藏您希望在视图模型中略微不同的属性。考虑封装或映射。我也更喜欢映射,因为它可以将您的视图模型与特定模型实现分离。

【讨论】:

  • 这不会编译。有错误set
  • 我以前从未听说过这个工具。我想我应该检查一下。谢谢您的帮助。代码本身不起作用(至少没有更多错误),但我今天学到了一个新概念。
  • @KirkBrannigan 对于大多数属性具有相同名称和类型的类之间的映射非常方便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2011-10-02
  • 2011-03-06
相关资源
最近更新 更多