Linq查找动态列表

Asked
Viewd1017

0

我有一个对象列表(字符串文件名,BitmapImage图像)用作图像的缓存。

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

我创建了一个Lookup,以在每次需要此高速缓存时检查图像。如果图像不在列表中,则会将其添加到列表中。

外观是静态创建的

 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

FileNameLookup静态变量是在某一时刻根据imageCache列表的内容构建的。如果以后将新元素添加到列表中,将不会反映查找。如果您不能使用内置的ASP.NET 缓存

0

使用“字典”,其中文件名是键,图像是值

或者,如果您希望保留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
}