c# - 如何更改类的构造函数以接收已创建的类和构造函数的对象的通用列表? (C#)

标签 c# generics

我有以下类(class):

public class OrderArticlesAdapter : RecyclerView.Adapter
{
    public List<OrderArticleViewModel> listOfOrderArticles;
    .....
    .....
    //constructor
    public OrderArticlesAdapter(List<OrderArticleViewModel> orderArticles, ....., .....)
    {
        listOfOrderArticles = orderArticles;
        ......
    }
}

我希望该类不仅能够处理 OrderArticleViewModel 列表而且还包含 Invoices 类型的列表以及任何其他类型。 OrderArticleViewModel类看起来像这样:

public class OrderArticleViewModel
{
    public string ArticleId { get; set; }

    public string LotId { get; set; }

    public string ArticleName { get; set; }

    public string PriceDiscount { get; set; }

    public string ArticlePrice { get; set; }

    public string ArticleQuantity { get; set; }

    public string ArticleTotalPrice { get; set; }

    public string Barcode { get; set; }

    public string ExpireDate { get; set; }

    public string LotName { get; set; }

    public string ArticlePriceAfterDiscount
    {
        get
        {
            decimal priceDiscount;
            if (!Decimal.TryParse(PriceDiscount, out priceDiscount))
            {
                priceDiscount = 0;
            }
            decimal articlePrice = Convert.ToDecimal(ArticlePrice);
            decimal discountAmount = Math.Round(articlePrice * (priceDiscount / 100), 4);
            decimal articlePriceAfterDiscount = articlePrice - discountAmount;
            return articlePriceAfterDiscount.ToString();
        }
    }
}

Invoices类看起来像这样:

public class Invoices
{
    public string ArtId { get; set; }
    public string Name { get; set; }
    public string Quantity { get; set; }
    public string Price { get; set; }
    public string Sum { get; set; }
    public string Discount { get; set; }
    public string PriceWodiscount { get; set; }
    public string Id { get; set; }
}

ArticleId , ArticleName , ArticleQuantity , PriceDiscount , ArticlePrice , Discount , ArticlePriceAfterDiscount来自类(class)OrderArticleViewModel对应属性ArtId , Name , Quantity , Discount , Price , Sum来自类(class)Invoices 。我该如何制作OrderArticlesAdapter构造函数能够接收 OrderArticleViewModel 的通用列表或Invoices或任何其他类型,而不破坏我已经使用 OrderArticlesAdapter 实例的代码的功能?

最佳答案

创建另一个构造函数,在其中将发票列表转换为 ArticleViewModel 列表:

public class OrderArticlesAdapter : RecyclerView.Adapter
{
    public List<OrderArticleViewModel> listOfOrderArticles;

    public OrderArticlesAdapter(List<OrderArticleViewModel> orderArticles, ....., .....)
    {
        listOfOrderArticles = orderArticles;
    }

    public OrderArticlesAdapter(List<Invoice> invoices)
    {
        listOfOrderArticles = invoices.Select(MapToArticleVM).ToList();
    }

    private OrderArticleViewModel MapToArticleVM(Invoice invoice)
    {
        return new OrderArticleViewModel
        {
            ArticleId = invoice.ArtId,
            // ...
        };
    }
}

请注意,结果列表将丢失一些属性,例如,因为 Invoice 不包含 Barcode

关于c# - 如何更改类的构造函数以接收已创建的类和构造函数的对象的通用列表? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50945856/

相关文章:

c# - 为什么代码首先要创建索引列?

java - 了解 Java 集合类中泛型的使用

c# - C# 泛型中的通配符等价物

c# - 在C++中定义一个需要在C#和C++中实现的接口(interface)

c# - 如何在应用程序暂停时保持文件转换事件

scala - 为什么 scala 返回一个 Any(Val/Ref) 当函数显然是用错误的类型调用时

generics - 是否可以在 ‘T is constrained to be a tuple of type ' T2*'T3 处编写一个 genericFunction<'T>?

c# - 如何在 C# 中将带参数的函数绑定(bind)到包中

C# 3.0 隐式转换错误与泛型类和接口(interface)

c# - C# 中的动态参数定义