派生したCacheItemを使用してMemoryCacheを実装していますが、キャッシュに入ったらそれとのやりとりが難しいです。たとえば:MemoryCacheからカスタムCacheItemを取得する
class Program
{
static void Main(string[] args)
{
MemoryCache cache = MemoryCache.Default;
CacheItemPolicy policy = new CacheItemPolicy();
CustomCacheItem someItem = (CustomCacheItem)cache.AddOrGetExisting(new CustomCacheItem(1, "tacos", "waffles"), policy);
Console.ReadLine();
}
}
public class CustomCacheItem : CacheItem
{
public int FailureCt { get; set; }
public CustomCacheItem(int _failureCt, string _key, string _value)
: base(_key, _value)
{
FailureCt = _failureCt;
}
}
は、これは一種の理にかなってUnable to cast object of type 'System.Runtime.Caching.CacheItem' to type 'CacheTest.CustomCacheItem'.
のエラーをスローします。おそらくキャッシュアイテムの情報を保持していないかもしれませんが、もしそうなら、私はどのようにカスタムキャッシュアイテムを取り出せますか?戻り値が汎用基本型の場合、そのプロパティ(この場合はFailureCt
)とどのように対話しますか?
CacheItemから派生する目的は何ですか? CacheItemは、キャッシュへのエントリとデータのラッパーとして機能します。 'CacheItem item =(CacheItem)cache.AddOrGetExisting(新しいCacheItem(1、" tacos "、" waffles ")、policy);' item.valueはデータを返します。 **ドキュメントの状態として、キーが存在する場合はnullを返します** [https://msdn.microsoft.com/en-us/library/dd988741.aspx](https://msdn.microsoft.com) /en-us/library/dd988741.aspx) – hdz
@hdzええ、私は、CacheItemがより大きなキャッシュ構造でどのように使用されたかについて、間違った前提があったと思います。私は余分な情報はすべてそれとともに保存されていると思ったが、それはそうではないようだ。 – Xedni