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

我有以下课程:

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中的ArticleNameArticleQuantityPriceDiscountArticlePriceDiscountArticlePriceAfterDiscountOrderArticleViewModel对应于属性ArtIdNameQuantityDiscountPriceSum来自类Invoices。如何使OrderArticlesAdapter构造函数能够接收OrderArticleViewModelInvoices或任何其他类型的通用列表,而又不破坏已经使用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

使用AutoMapper将简单DTP转换为复杂DTO - c#

我有一个简单的DTO看起来像这样: public partial class Company { public string NAME { get; set; } public string CONTACT_ADDR1_1 { get; set; } public string CONTACT_ADDR2_1 { get; set; } public str…

从列表中获取价值(C#UWP) - c#

我有课 public class RootObject { public int id { get; set; } public int parent_id { get; set; } public string status { get; set; } public string order_key { get; set; } public string …

Automapper-同时拉平列表 - c#

我有一个从客户端收到的视图模型,看起来像这样public class OrderViewModel { public string Name{get;set;} public string ContactDetails {get;set;} public List<FunkyThing_ViewModel> {get;set;} } public…

.get()之后,多处理陷入困境 - python

我试图了解multiprocessing如何在python中工作并遇到一些问题。这是示例:import multiprocessing def func(): return 1 p = multiprocessing.Pool() result = p.apply_async(func).get() 调用.get()函数时,代码只是卡住了。我究竟做错了什么?…

AJAX和file_get_contents - php

我有一个使用file_get_contents的脚本,然后解码返回的JSON ...$urlone = json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=f…