2009-11-13 67 views
0

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

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我的元素添加到列表中查找不会返回那些具有相同的文件名的对象。

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

只有当列表的内容是静态的时才应该使用查找吗?我可以轻松使用字典,但想尝试查找。

干杯,

詹姆斯

回答

0

FileNameLookup静态变量从imageCache列表的内容内置在某个时间的时刻。如果稍后将新元素添加到列表中,则不会反映查找。如果你不能使用内置的ASP.NET cache,字典确实会是更好的缓存解决方案。

0

要么使用字典其中filename是关键,图像是价值

或者如果你喜欢保持的ImageData对象,你可以创建KeyedCollection的子类,提取文件名属性并使用它作为重点:

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 
}