[英]Linq Lookup dynamic list
我有一個對象列表(字符串文件名,BitmapImage圖像)用作圖像緩存。
private static readonly List<ImageData> imageCache = new List<ImageData>();
我創建了一個Lookup以在每次需要此緩存時檢查它的圖像。 如果圖像不在列表中,則會將其添加到列表中。
Looked是靜態創建的
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);
}
僅在列表內容為靜態的情況下才應使用查找嗎? 我可以輕松地使用字典,但想嘗試查找。
干杯,
詹姆士
FileNameLookup
靜態變量有時會根據imageCache
列表的內容構建。 如果以后將新元素添加到列表中,將不會反映查找。 字典確實是緩存更好的解決方案,如果你不能使用內置的ASP.NET 緩存 。
要么使用字典,其中文件名是鍵,圖像是值
或者,如果您希望保留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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.