MongoDBコレクションから一般的にデータを取得する関数を作成しようとしています。これを行うために、List<T>
を返すジェネリックメソッドを構築しました。リストを<[KnownType]>にキャストすると、関数の戻り値の型に一致するリスト<T>になりますか?
私の問題は、返すためにはList<T>
を作成する必要がありますが、typeof
T
に基づいています。私は..私は「暗黙のうちにList<[KnownType]>
からList<T>
に変換できませんの線に沿ってエラーを受け取るreturn
ラインの両方で
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);
// ...
}
私はコンパイラを喜ばせるために何をする必要があるかわからない。私には理にかなって、typeof
T
は必ずしも一致しないため、typeof
はBsonDocument
言う。しかし、私はこれを行うには、適切なチェックを行っている。
私はList<T>
にList<[KnownType]>
をキャストすることはできますか?
ジェネリック型をチェックするためのif文を持つことは、最初にジェネリック型を使う目的を打ち負かしているようです。 – juharr
あなたが私に尋ねられたなら、それが呼び出されたタイプに基づいてあなたが返すものを変更すべきではありません。その決定は、何らかのコールバックによって、呼び出し先とは別の方法に移行する必要があります。 –
私はこれを試していましたが、基本的には同じエラーです。 "リスト<[KnownType]>'を 'List'に変換できません。 –
KDecker