簡體   English   中英

Linq查找動態列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM