2009-11-13 68 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 
}