David Johnson
David Johnson

Reputation: 419

Cloning A Class

I have two classes which contain the same fields, however one inherits some properties from somewhere else and the other does not.

I have created a generic list using the class "ZEUS_ResearchStocksHistory" , but then I need to clone all of the fields over to the other list "ZEUS_ResearchStocksHistoryWithExcel". I don't want to have to loop through each field in one list and populate the other, or write some sort of linq join, there must be a faster way?

The reason I can't use the same class in both instances is that when inheriting the ExcelReport function it adds additional fields which I do not want when I display this list in a data grid.

internal class ZEUS_ResearchStocksHistory
{
 public String Amendment { get; set; }
 public String AmendedBy { get; set; }
 public String Sedol { get; set; }
 public String Date { get; set; }
}

internal class ZEUS_ResearchStocksHistoryWithExcel : ExcelReport
{
 public String Amendment { get; set; }
 public String AmendedBy { get; set; }
 public String Sedol { get; set; }
 public String Date { get; set; }
}

Is this possible?

Thanks

Upvotes: 0

Views: 94

Answers (2)

David Pfeffer
David Pfeffer

Reputation: 39833

Check out Automapper, which is designed to do exactly this. Automapper is up on NuGet.

http://lostechies.com/jimmybogard/2009/01/23/automapper-the-object-object-mapper/

You could do something as simple as:

Mapper.CreateMap<ZEUS_ResearchStocksHistory, ZEUS_ResearchStocksHistoryWithExcel>();
var newObject = Mapper.Map<ZEUS_ResearchStocksHistory, ZEUS_ResearchStocksHistoryWithExcel>(oldObject);

Or, since you said you have a list, you could do:

var newList = oldList.Select(x => Mapper.Map<ZEUS_ResearchStocksHistory, ZEUS_ResearchStocksHistoryWithExcel>(x));

Upvotes: 0

Boas Enkler
Boas Enkler

Reputation: 12557

Did you have a look at automapper?

example from codeproject:

CustomerViewItem customerViewItem = 
   Mapper.Map<Customer, CustomerViewItem>(customer);

Upvotes: 1

Related Questions