2016-09-24 6 views
1

を格納していませんが、それは常にnullだった:MemoryCacheは、私が疲れてキャッシュする人口IReadOnlyListを設定IReadOnlyList

CacheItemPolicy cip = new CacheItemPolicy(); // no expiration 
IReadOnlyList<T> dataList = [populate var] 

if (dataList != null) 
{ 
    MemoryCache.Default.Set(_cacheKey, dataList, cip); 
} 

何もキャッシュに設定されていません。しかし、私がそれを変更すると、

List<T> list = null; 
CacheItemPolicy cip = new CacheItemPolicy(); // no expiration 
IReadOnlyList<T> dataList = [populate var] 

if (dataList != null) 
{ 
    list = dataList.ToList();  
    MemoryCache.Default.Set(_cacheKey, list, cip); 
} 

が動作します。 MemoryCacheはインターフェイスまたはIReadOnlyListオブジェクトをサポートしていませんか?

+1

どのように 'dataList'リストにデータを設定しますか? –

+0

実際には、関数を渡して、単純な例を維持しています。呼び出しをラップする関数を削除しました。 – Josh

+0

関数から返されるオブジェクトのタイプは? (関数の戻り値の型ではなく、特定の場合の戻り値の実際の型)。私は可変型が問題ではないと思っていますが、オブジェクトの型が重要かもしれません。 –

答えて

0

MemoryCacheは、最初の例のリストへの参照と2番目の例のリストのコピーをキャッシュしています。

あなたのコードは、dataListとして渡されたリストを再利用する必要があります。したがって、コピーをキャッシュする必要があります。 ToList()を呼び出すとコピーが作成されます。

関連する問題