2016-04-24 3 views
1

Angabe Während diesesDie Typargumente für die Methode '' können nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit

IEnumerable<Colors> c = db.Products.Where(t => t.ProductID == p.ProductID).SelectMany(s => s.Colors); 
if (c.Any()) sp.color = Constructor(c); 

man tun und später

private string Constructor<T>(List<T> list) 
{ 
    //Do something 
} 

i den Fehler

Die Art Argumente für die Methode ‚Controller.Constructor (System.Collections.Generic.List) 'kann nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben.

Natürlich ist es nicht korrekt. Aber was vermisse ich?

Antwort

2

Im Constructor<T>() Methode erwartet einen List<T> Typ, aber Sie stellen eine Instanz von IEnumerable<T> bereit.

  • Änderung der Methodenparameter Typ IEnumerable<T>
  • Konvertit List<T> Typ abzufragen
IEnumerable<Colors> c = 
    db 
     .Products 
     .Where(t => t.ProductID == p.ProductID) 
     .SelectMany(s => s.Colors) 
     .ToList(); 

if (c.Any()) sp.color = Constructor(c); 

private string Constructor<T>(IEnumerable<T> list) 
{ 
    //Do something 
} 
1

Konstruktor erwartet konkreten Typ (List<T>) und Sie übergeben es Schnittstelle (IEnumerable<T>). Stellen Sie sich vor, unter IEnumerable<T> gibt es so etwas wie ReadOnlyCollection<T> - wie würden Sie das auf List? Du kannst nicht. Also, wenn Sie etwas nicht verwenden List-spezifische in Ihrem Konstruktor ändern Signatur:

private string Constructor<T>(IEnumerable<T> list) 
{ 
//Do something 
} 

Ansonsten - wandeln Sie Ihre Farben über .ToList() Erweiterungsmethode zur Liste:

if (c.Any()) sp.color = Constructor(c.ToList()); 
Verwandte Themen