0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Caching;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            MemoryCache.Default.Add("C1", new Customer { Name = "C1" }, DateTime.Now.AddDays(1));

            MemoryCache.Default.Add("C2", new Customer { Name = "C2" }, DateTime.Now.AddDays(1));

            MemoryCache.Default.Add("C3", new Customer { Name = "C3" }, DateTime.Now.AddDays(1));

            Console.WriteLine("Total Cached Objects: {0}", MemoryCache.Default.GetCount());

            Console.WriteLine("Total cached objects of type Customer: {0}", MemoryCache.Default.OfType<Customer>().Count());

            Console.Read();

        }
    }


    public class Customer
    {
        public string Name { get; set; }
    }
}

Customer タイプの 3 つのオブジェクトを MemoryCache に追加し、MemoryCache をフィルタリングして、Customer タイプのオブジェクトのみを取得しようとしています。

上記のコードを実行した後、「顧客タイプのキャッシュされたオブジェクトの合計」が 3 になると予想していましたが、0 が返されます。

ここで何が間違っているのか誰でも指摘できますか?

4

1 に答える 1

2

関連する MemoryCache のメソッドの宣言は次のとおりです。

  IEnumerator<KeyValuePair<string, Object>> GetEnumerator()

そのメソッドは KeyValue ペアのリストを返します。値だけが必要です。
次のようなものが必要なようです

// utested
MemoryCache.Default.Select(x => x.Value).OfType<Customer>().Count()
于 2011-04-15T16:33:32.567 に答える