Я пытаюсь сделать функцию, которая в основном извлекает данные из моих коллекций MongoDB. Для этого я создал общий метод, который возвращает List<T>
.Список кастингов <[KnownType]> в список <T> для соответствия функции типа возврата?
Моя проблема заключается в том, что я должен создать это List<T>
для возврата, но я делаю это на основе typeof
T
. Я не уверен, что мне нужно сделать, чтобы угодить компилятор ..
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);
// ...
}
В обеих return
линий я получаю ошибку вдоль линий «Не удается неявно преобразовать из List<[KnownType]>
в List<T>
. Который имеет смысл для меня , потому что typeof
T
не обязательно соответствовать typeof
сказать BsonDocument
. Но я сделал правильный чек, чтобы сделать это.
Могу ли я бросить List<[KnownType]>
к List<T>
?
Имея, если утверждения для проверки типичного типа, похоже, преследуют цель использования дженериков в первую очередь. – juharr
Если вы спросили меня, вы не должны изменять то, что вы возвращаете, в зависимости от типа, с которым он вызван. Это решение должно перейти от отдельного метода от вызываемого абонента через какой-либо обратный вызов. –
Я пробовал это и его в основном ту же ошибку «Невозможно преобразовать тип» Список <[KnownType]> 'to' List '", просто пропуская слово неявное. –
KDecker