2009-09-09 7 views
1

J'utilise extensivement ArrayList et j'ai du mal à utiliser cette liste <>. J'utilise l'ORM EntitySpace pour faire des choses DAL. Cette chose fonctionne bien MAIS le problème est que je dois définir Liste <> avec le type d'objet qui se plaint qu'il ne peut pas convertir cela.Remplacement de ArrayList par List <> en C#

Je suis reconnaissant de votre aide.

originale en utilisant ArrayList:

public ArrayList Get() 
    { 
     TndCustomerTendersCollection collection = new TndCustomerTendersCollection(); 
     collection.Query 
     .Select 
     (
      collection.Query.CustomerTenderID, 
      collection.Query.CustomerTenderID, 
      collection.Query.CustomerTenderCode, 
      collection.Query.CustomerTenderName, 
      collection.Query.StartDate, 
      collection.Query.DueDate, 
      collection.Query.CompleteDate, 
      collection.Query.DateCreated, 
      collection.Query.LastDateModified 
     ) 
     .Where 
     (
      collection.Query.IsActive.Equal(true) 
     ); 

    ArrayList list = new ArrayList(); 
     foreach (TndCustomerTenders item in collection) 
     { 
      list.Add(item); 
     } 
     return list; 
    } 

Après avoir remplacé Liste

public List<Tender> Get() 
    { 
     TndCustomerTendersCollection collection = new TndCustomerTendersCollection(); 
     collection.Query 
     .Select 
     (
      collection.Query.CustomerTenderID, 
      collection.Query.CustomerTenderID, 
      collection.Query.CustomerTenderCode, 
      collection.Query.CustomerTenderName, 
      collection.Query.StartDate, 
      collection.Query.DueDate, 
      collection.Query.CompleteDate, 
      collection.Query.DateCreated, 
      collection.Query.LastDateModified 
     ) 
     .Where 
     (
      collection.Query.IsActive.Equal(true) 
     ); 

     // HOW DO CONVERT THAT TO THAT LIST 

     List<Tender> list = new List<Tender>(); 
     foreach (TndCustomerTenders item in collection) 
     { 
      list.Add(item); 
     } 
     return list; 
    } 
+1

TndCustomerTenders étend tendre? Parce que dans le deuxième exemple, vous avez une liste d'objets Tender, pas de TndCustomerTenders. Pour convertir ce que vous avez ci-dessus, vous devez utiliser Liste

+1

Devrait Liste ne pas être liste ? –

+1

Votre boucle foreach ne devrait-elle pas être: foreach (Objet tendre dans la collection)? –

Répondre

6

TndCustomerTenders et tendres sont deux types différents.

Vous devez convertir explicitement TndCustomerTenders en Tender, ou vous devez définir une conversion implicite.

List<Tender> list = new List<Tender>(); 
     foreach (TndCustomerTenders item in collection) 
     { 
      //assumes conversion via constructor 
      list.Add(new Tender(item)); 
     } 

ou

List<Tender> list = new List<Tender>(); 
     foreach (TndCustomerTenders item in collection) 
     { 
      Tender t = new Tender() { foo = item.foo, bar = item.bar }; 
      list.Add(t); 
     } 
+0

J'aime cette idée ... merci beaucoup. – dcpartners

2

changement

public List<Tender> Get() 

à

public List<TndCustomerTenders> Get() 

et le changement

List<Tender> list = new List<Tender>(); 

à

List<TndCustomerTenders> list = new List<TndCustomerTenders>(); 

Ou si vous utilisez le dernier cadre,

var list = new List<TndCustomerTenders>(); 
+0

Je veux que la sortie soit Tender car c'est ce que j'ai défini dans les objets BUsiness mt alors que TndCustomerTenders est l'objet provenant de DAL. – dcpartners

2
return collection.ToList<Tender>(); 
+0

Cool. Je ne savais pas ToList avait un moyen générique de le faire. – spender

+0

Cela suppose que TndCustomerTendersCollection offre la ToList() (ce qui n'est pas le cas) et deux, il existe une conversion entre Tender et TndCustomerTenders – Alan

+0

Cette collection n'offre malheureusement pas de méthode ToList(). – dcpartners

1

Est-ce que vous voulez?

.Where(collection.Query.IsActive.Equal(true)).Cast<Tender>().ToList() 
+0

Malheureusement, la collection que j'ai n'a pas ces méthodes ci-dessus. – dcpartners

Questions connexes