Динамический список Linq Lookup - PullRequest
0 голосов
/ 13 ноября 2009

У меня есть список объектов (имя файла строки, изображение BitmapImage) для использования в качестве кэша изображений.

private static readonly List<ImageData> imageCache = new List<ImageData>();

Я создал «Уточняющий запрос», чтобы каждый раз проверять этот кэш на наличие изображения. Если изображение отсутствует в списке, оно добавляется в список.

Смотритель статически создан

private static Lookup<string, ImageData> FileNameLookup = (Lookup<string, ImageData>)
               imageCache.ToLookup(data => data.ImageFileName, data => data);

Однако, если я не воссоздаю FileNameLookup каждый раз, когда добавляю элемент в список, Lookup никогда не возвращает объекты с одинаковым именем файла.

public static void Reinit()
{
    FileNameLookup = (Lookup<string, ImageData>) imageCache.ToLookup(data =>
                                                 data.ImageFileName, data => data);
}

Следует ли использовать поиск только в том случае, если содержимое списка статично? Я могу легко использовать словарь, но хотел попробовать поиск.

Приветствия

Джеймс

Ответы [ 2 ]

0 голосов
/ 13 ноября 2009

Либо используйте словарь, где имя файла - это ключ, а изображение - значение

.

Или, если вы предпочитаете сохранить объект ImageData, вы можете создать подкласс KeyedCollection, который извлекает свойство filename и использует его в качестве ключа:

class ImageCache : System.Collections.ObjectModel.KeyedCollection<string, ImageData>
{
    protected override string GetKeyForItem(ImageData item)
    {
        return item.ImageFileName;
    }
}

и используйте его вот так

ImageCache c = new ImageCache();
string path = @"c:\somepath\image.jpg";
if (c.Contains(path))
{
    return c[path];
}
else
{
    // put something into the cache
}
0 голосов
/ 13 ноября 2009

Статическая переменная FileNameLookup строится из содержимого списка imageCache в определенный момент времени. Если позже вы добавите новый элемент в список, это не будет отражать поиск. Словарь действительно будет лучшим решением для кэширования, если вы не можете использовать встроенный ASP.NET cache .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...