【发布时间】:2016-03-31 12:55:59
【问题描述】:
我有这段代码
public class Ticket
{
public string strArticleID { get; set; }
public string strArticleDescription { get; set; }
public decimal decArticlePrice { get; set; }
public decimal decArticleVAT { get; set; }
public decimal decArticuleNetPrice { get; set; }
public decimal decArticleDiscount { get; set; }
public decimal decArticleQuantity { get; set; }
}
public static List<Ticket> _lstCurrentTicket = new List<Ticket>();
我想发送到外部 DLL 以获取 _lstCurrentTicket 中的所有行以通过打印票证
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
Ticket ticket = new Ticket();
string strRefID = this.dataGridView1.Rows[i].Cells[0].Value.ToString();
string strDescription = this.dataGridView1.Rows[i].Cells[1].Value.ToString();
decimal decQuantity = (decimal)this.dataGridView1.Rows[i].Cells[2].Value;
decimal decUPrice = (decimal)this.dataGridView1.Rows[i].Cells[3].Value;
decimal decDiscount = Convert.ToDecimal(this.dataGridView1.Rows[i].Cells[4].Value.ToString().Substring(0, this.dataGridView1.Rows[i].Cells[4].Value.ToString().Length - 1));
decimal decVAT = Convert.ToDecimal(this.dataGridView1.Rows[i].Cells[5].Value.ToString().Substring(0, this.dataGridView1.Rows[i].Cells[5].Value.ToString().Length - 1));
decimal decGPrice = (decimal)this.dataGridView1.Rows[i].Cells[6].Value;
ticket.strArticleID = strRefID;
ticket.strArticleDescription = strDescription;
ticket.decArticlePrice = decUPrice;
ticket.decArticleVAT = decVAT;
ticket.decArticuleNetPrice = decGPrice;
ticket.decArticleDiscount = decDiscount;
ticket.decArticleQuantity = decQuantity;
_lstCurrentTicket.Add(ticket);
}
TicketPrinting tktPrint = new TicketPrinting ();
//Ticket and copies
tktPrint.PrintTicketFromList(_lstCurrentTicket, 2);
由于它是一个外部 DLL,我认为在目标 DLL 中使用它的最简单方法是
public void PrintTicketFromList<T>(List<T> lstArticles, short intCopies)
{
foreach (var prop in lstArticles.GetType().GetProperties())
{
if (prop.Name == "Item")
{
//Copy external list to local class for printing
}
}...
但我被困在那里。如何从列表中的每个原始类中迭代每个属性和值以便复制它?如果我做一个断点,我可以看到字段和值被正确传递,但我不知道如何访问它们,所以我可以做一些事情,比如创建一个与原始类完全相同的本地类并克隆列表(如果我尝试它会说本地 list(Ticket) 和传递的 List(T) 不是同一个类型)。
或者如果我在目标中创建一个确切的类并执行类似的操作,我怎么能复制它
public void PrintTicketFromList(object lstArticles, short intCopies)
{
List<TargetDLLTicket> lst =((List<TargetDLLTicket>)lstArticles).ToList(); }
有什么想法吗?
【问题讨论】:
-
什么是“外部 DLL”,为什么不能传递
List<CustomClass>? -
请添加一些关于这个“外部 DLL”应该做什么以及它提供什么样的接口的信息。
-
我的意思是,我创建了一个 DLL 来打印内容并将其添加到项目中作为参考。如果我只是做 tktPrint.PrintTicketFromList(_lstCurrentTicket, 2);它会抛出一个错误,因为我无法访问列表中的元素。
-
你可以使用 AutoMapper 之类的东西来复制你想要的属性,但我不明白为什么
PrintTicketFromList首先需要是通用的。 -
如果
PrintTicketFromList所在的代码没有引用定义Ticket的程序集(并且您不希望它),那么您需要使用反射来获取属性,或者定义一个接口,如果有足够的属性重叠,您的Ticket可以使用。
标签: c# visual-studio list getproperties