3

我在一个应用程序中有一个类 -我无法更改(旧版) - 它位于程序集(DLL 文件)内部:

public class ShippingMethod
{
    public string ShipMethodCode { get; set; }
    public string ShipMethodName { get; set; }
    public decimal ShippingCost { get; set; }

    public List<ShippingMethod> GetAllShippingMethods()
    {
    ......
    }
}

我有第二个应用程序引用该程序集(DLL 文件),并且需要使用所有运输方法填充下拉列表。例如:“UPS - 3.25 美元”

问题是它需要为不同的货币使用正确的格式。例如:3.25 美元或 3.25 欧元,具体取决于名为 CountryID 的参数。

我编写了一个函数String DisplayMoney(Decimal Amount, Integer CountryID),它将返回金额的正确格式。

现在我需要将此功能应用于每种运输方式并将其保存到新列表中。做这个的最好方式是什么?

我可以创建另一个名为 LocalizedShippingMethods 的类,如下所示:

public class LocalizedShippingMethod
{
    public ShippingMethod ShipMethod { get; set; }
    public string LocalizedShippingCost { get; set; }
}

这是实现这一目标的最佳方法吗?有没有更好的方法使用继承来做到这一点?如果我使用继承,我如何将第一个列表中的值放入新列表中?

4

3 回答 3

2

这确实是一个很好的方法。您可以使用一个非常快速的 Linq 查询将旧查询拉List入新查询:

List<LocalizedShippingMethod> Translate(List<ShippingMethod> oldList)
{
  return oldList.Select(a => new LocalizedShippingMethod
     {
         // Initialize properties according to however you translate them
     }).ToList();
}

此外,为了使这更加简化和明显,您可以执行以下任何操作来帮助翻译:

  • LocalizedShippingMethod为它创建一个构造函数ShippingMethod并正确设置属性
  • 在其上创建一个静态方法,LocalizedShippingMethod该方法接受 aShippingMethod并返回一个初始化的LocalizedShippingMethod
  • 创建一个LocalizedShippingMethod从 a 转换的运算符ShippingMethod
  • 在 上创建一个扩展方法ShippingMethod,调用它ToLocalized()返回一个LocalizedShippingMethod
于 2013-02-06T17:08:15.100 回答
0

如果为 ShippingMethod 类创建扩展方法会怎样?

于 2013-02-06T17:07:24.403 回答
0

做到这一点的最佳方式是最适合您的方式。 如果您是必须维护此代码的人,那么什么会让您的生活变得最轻松?

一旦你回答了这个问题,就是最好的解决方案。

于 2013-02-06T17:09:18.877 回答