Ich versuche eine Funktion zu erstellen, die generisch Daten aus meinen MongoDB-Sammlungen abruft. Um dies zu tun, habe ich eine generische Methode konstruiert, die eine List<T>
zurückgibt.Casting-Liste <[KnownType]> zu Liste <T>, um Rückgabetyp der Funktion zu entsprechen?
Mein Problem ist, dass ich diese List<T>
erstellen muss, um zurückzukehren, aber ich mache es basierend auf der typeof
. Ich bin nicht sicher, was ich tun muss, um den Compiler zu gefallen ..
public async Task<List<T>> GetDocsAsync<T>(
CollectionTypes collection, // Enum representing my Collections
FilterDefinition<BsonDocument> search,
SortDefinition<BsonDocument> sort = null)
{
// Get BsonDocuments from the collection based on the search and sort criteria
List<BsonDocument> matchedDocs;
IMongoCollection<BsonDocument> MongoCollection = GetCollection(collection);
if (sort == null) matchedDocs = await MongoCollection.Find(search).ToListAsync();
else matchedDocs = await MongoCollection.Find(search).Sort(sort).ToListAsync();
// Return a List<T>, covert matchedDocs to List<T> if need be
Type docType = typeof(T);
if (docType == typeof(BsonDocument))
return matchedDocs;
else if (docType == typeof(LogEvent_DBDoc))
return LogEvent_DBDoc.ConvertFromBson(matchedDocs);
// ...
}
Bei beiden der return
Linien erhalte ich einen Fehler nach dem Vorbild der „Kann nicht implizit List<[KnownType]>
-List<T>
konvertieren. Was macht Sinn für mich nicht, weil die typeof
T
nicht unbedingt entspricht die typeof
BsonDocument
sagen. Aber ich habe die richtige Prüfung vorgenommen, dies zu tun.
Kann ich werfen List<[KnownType]>
-List<T>
?
Wenn Aussagen zu überprüfen, die generische Art scheint den Zweck der Verwendung von Generika in erster Linie zu besiegen. – juharr
Wenn Sie mich gefragt haben, sollten Sie nicht ändern, was Sie zurückgeben, basierend auf dem Typ, mit dem es aufgerufen wird. Diese Entscheidung sollte durch einen Callback in eine vom Aufrufer getrennte Methode gehen. –
Ich hatte versucht, und es ist im Grunde der gleiche Fehler "Kann nicht konvertieren Typ" Liste <[KnownType]> 'zu" Liste '", nur fehlt das Wort implizit. –
KDecker