2012-04-05 2 views
0

Ich bekomme einen Fehler im unteren Code es heißt, ich kann die Methodengruppe ListStudents nicht in generic.list konvertieren, wenn ich am Ende von ListStudents versuche(): kann Array in Liste nicht umwandelnkann keine Methodengruppe konvertieren oder Array zu Liste konvertieren als eine Methode

Alles im Versuch zu tun ist, einige Benutzer zu einem Array hardcodieren und sie in meinem GET-Anfrage gibt es eine Lösung für diese?

[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "")] 
    List<Student> GetStudentCollection(); 
} 
[DataContract(Name="Student")] 
public class Student 
{ 
    [DataMember(Name = "StudentID")] 
    public string StudentID { get; set; } 
    [DataMember(Name = "FirstName")] 
    public string FirstName { get; set; } 
    [DataMember(Name = "LastName")] 
    public string LastName { get; set; } 

} 
public class RawDataService : IReceiveData 
{ 
    public Student[] ListStudents() 
    { 
     List<Student> student = new List<Student>() 
     { 
      new Student { StudentID="bla", FirstName="bla", LastName="bla"}, 
      new Student { StudentID="bla1", FirstName="bla1", LastName="bla1"}, 
      new Student { StudentID="bla2", FirstName="bla2", LastName="bla2"} 
     }; 
     return student.ToArray(); 
    } 

    public List<Student> GetStudentCollection() 
    { 
     return ListStudents(); //error on this line, cant convert array to list 
    } 

Antwort

1

Versuchen Sie, die ToList mit linq extension method:

using System.Linq; 

... 

public Student[] ListStudents() 
{ 
    List<Student> student = new List<Student>() 
    { 
     new Student { StudentID="bla", FirstName="bla", LastName="bla"}, 
     new Student { StudentID="bla1", FirstName="bla1", LastName="bla1"}, 
     new Student { StudentID="bla2", FirstName="bla2", LastName="bla2"} 
    }; 
    return student.ToArray(); 
} 

public List<Student> GetStudentCollection() 
{ 
    return ListStudents().ToList(); //<-- this is the change you need 
} 

jedoch zu reduzieren die Anzahl der Conversions würde ich vorschlagen, die Methoden wie folgt zu ändern:

public Student[] ListStudents() 
{ 
    return GetStudentCollection().ToArray(); 
} 

public IList<Student> GetStudentCollection() 
{ 
    var students = new List<Student>() 
    { 
     new Student { StudentID="bla", FirstName="bla", LastName="bla"}, 
     new Student { StudentID="bla1", FirstName="bla1", LastName="bla1"}, 
     new Student { StudentID="bla2", FirstName="bla2", LastName="bla2"} 
    }; 

    return students(); 
} 
+0

Nicht gültig in dem gegebenen Kontext –

+0

@Garrith, sollte es funktionieren, stellen Sie sicher, dass Sie die using-Anweisung enthalten, aktualisierte Antwort, um klarer zu sein. – Matt

+0

ahh ich verpasste die using-Anweisung !! –

2

ListStudents ist eine Methode, nicht eine Eigenschaft, versuchen so folgt aus:

return ListStudents(); 

Auch ListStudents() Verfahren ändern, um eine List wie folgt zurück:

public List<Student> ListStudents() 
    { 
     List<Student> student = new List<Student>() 
     { 
      new Student { StudentID="bla", FirstName="bla", LastName="bla"}, 
      new Student { StudentID="bla1", FirstName="bla1", LastName="bla1"}, 
      new Student { StudentID="bla2", FirstName="bla2", LastName="bla2"} 
     }; 
     return student; 
    } 
+0

kann nicht Implizite Array in Liste konvertieren? Wenn ich das versuche –

+0

Das ist ein weiterer Fehler, Ihr Rückgabetyp stimmt nicht mit deklariertem Typ überein. – RedFilter

+0

D.h., ändern Sie 'ListStudents()', um eine 'List' zurückzugeben. – RedFilter

1

Sofern Sie einen Grund für die Verwendung eines Arrays haben nur die Liste zurück, wie ist. Warum die CPU ausgeben, um ein Array zu konvertieren nach unten, dann wieder bis zu einer List:

public class RawDataService : IReceiveData 
{ 
    public List<Student> ListStudents() 
    { 
     List<Student> students = new List<Student>() 
     { 
      new Student { StudentID="bla", FirstName="bla", LastName="bla"}, 
      new Student { StudentID="bla1", FirstName="bla1", LastName="bla1"}, 
      new Student { StudentID="bla2", FirstName="bla2", LastName="bla2"} 
     }; 
     return students; 
    } 

    public List<Student> GetStudentCollection() 
    { 
     return ListStudents(); //error on this line, cant convert array to list 
    } 

Aber wenn Sie das Array zurückgeben müssen, dann mit dem Fehler die Zeilen ändern:

using System.Linq; 
    ... 
    return ListStudents().ToList(); 
+0

http://stackoverflow.com/questions/10030872/list-datamembers-into-listbox Ich dachte nur, ein Array wäre klüger? –

+0

O btw Justin hat herausgefunden, wie man jetzt Informationen für einen Rest-Service in einer Konsolen-App hin und her gibt! –

+1

@Garrith gut. Aber ob Sie eine Liste oder ein Array verwenden, sollte nicht wichtig sein. In diesem Fall ist Ihr finaler Rückgabetyp eine Liste ... weshalb es unnötig ist, einen Downcast durchzuführen und dann upcast ... es ist unnötige CPU verbraucht ... Wenn Sie Probleme mit Typen haben, verwenden Sie einfach die KnownTypeAttribute: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.knowntypeattribute.aspx –

Verwandte Themen