2016-03-27 28 views
-2

Başka bir yönteme dönmek için Ürünleri içeren bir Listeyi bir Listeye dönüştürmeye çalışıyorum. Bu benim yöntem gibi görünüyor:Genel bir liste <MyClass> IList <System.Type> nasıl dönüştürülür?

public IList<Type> GetProducts() 
{ 
    var products = new List<Products>() 
    { 
     new Products { ID="1",Name="Soap",Price="200"}, 
     new Products { ID="2",Name="Trouser",Price="300"}, 
     new Products { ID="3",Name="Shirt",Price="400"} 
    }.ToList(); 

    return products; 
} 

Error:Giving me an error saying cannot convert a List of Products into List of System.Type.

Birisi bana bu sorunu çözmek için bir yaklaşım verebilir misiniz. Şimdiden teşekkür ederim!

+2

'Product' Nesnesi' değil, 'Type'' soyundan. – ieaglle

+0

evet, ama bir T tipi Liste döndürmek zorundayım. – Dayan

+0

Geri dönebilirsiniz: yeni Liste {typeof (Ürünler)}, yalnızca listede bulunan türdür. –

cevap

2

@ ice-jovanoski tarafından yanıtın biraz ortalanmış sürümü. Bu kullanan "products.Select (x => x.GetType()). ToList()"

public static IList<Type> GetProducts() 
    { 
     var products = new List<Products>() 
     { 
      new Products { ID="1",Name="Soap",Price="200"}, 
      new Products { ID="2",Name="Trouser",Price="300"}, 
      new Products { ID="3",Name="Shirt",Price="400"} 
     }.ToList(); 

     return products.Select(x => x.GetType()).ToList();    
    } 
+0

GetProducts'ta iki kez .ToList() yapmak zorunda değilsiniz. İade beyanında sadece bir kez yapmak yeterince iyi olmalıdır. – Ron5504

+1

@Dayan, buna neden ihtiyaç duyacağınız kesin değil. Çağıran kod bir 'List {typeof (Product), typeof (Product), typeof (Product)}' ile ne yapacak? – CodeCaster

3

Peki, ne yazdım gözden geçirelim:

  1. public IList<Type> GetProducts() temelde Tip nesnelerin listesini dönersiniz anlamına gelir, ancak yöntemin vücudunda temelde return new List<Products>; demek ki belli ki olamaz çünkü yöntemler imzası ile çelişiyor. Listedeki nesnelerin türlerini seçecek olan return products.Select(x=>typeof(x)).ToList();'u tercih edebilirsiniz.

  2. Bunu neden yapmak istersiniz? Aynı türden bir liste oluşturuyorsunuz, Ürünler ve iade edilen liste aynı nesneleri (Ürün tipi) içerecektir.

  3. Daha spesifik olabilir misiniz, ne elde etmeye çalışıyorsunuz?

+0

Burada sadece istediğim başka bir yönteme bir T tipi listesi göndermektir. Aynı şekilde ürünleri benim örneğimde kullandım, başka sınıflarım var, onları da kullanmam gerekiyor. – Dayan

+1

'products.Select (x => typeof (x)) ToList();' bunu yapabilir ve nesnelerin bulunduğu herhangi bir listenin türlerini bulabilirsiniz. –

+0

benim için çalışmıyor. Denedim. bana bir hata veriyor. "Ürünler bir değişkendir ama bir Türü gibi kullan" – Dayan

0

bu deneyin:

public IList<Products> GetProducts() 
{ 
    var products = new List<Products>() 
    { 
     new Products { ID="1",Name="Soap",Price="200"}, 
     new Products { ID="2",Name="Trouser",Price="300"}, 
     new Products { ID="3",Name="Shirt",Price="400"} 
    }.ToList(); 

    return products; 
} 

döndürme türü IList<Products> değil IList<System.Type> olmalıdır.

+0

Hayır, bir T tipi listesi vermek zorundayım. Bu bir şarttır. – Dayan

İlgili konular