#.net #caching #c#-4.0 #memorycache
#.net #кэширование #c #-4.0 #memorycache
Вопрос:
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; }
}
}
Я добавляю 3 объекта типа Customer в MemoryCache, а затем пытаюсь отфильтровать MemoryCache, чтобы извлечь только те объекты, которые имеют тип Customer.
После выполнения приведенного выше кода я ожидал, что «Общее количество кэшированных объектов типа Customer» будет равно 3, но оно возвращает 0.
Кто-нибудь может указать мне, что здесь не так?
Ответ №1:
Объявление соответствующего метода MemoryCache является
IEnumerator<KeyValuePair<string, Object>> GetEnumerator()
Этот метод возвращает список пар ключ-значение, вы ожидаете только значения.
Похоже, вам нужно что-то вроде
// utested
MemoryCache.Default.Select(x => x.Value).OfType<Customer>().Count()