2012-02-12 41 views
0

如果我有一個類型爲ConfigurationSection的集合,如何在集合中搜索?如何在ConfigurationSection類型的集合中搜索?

(我是一個C#小白和業餘愛好者)

我有這個類:

(從http://net.tutsplus.com/tutorials/asp-net/how-to-add-custom-configuration-settings-for-your-asp-net-application/

public class FeedRetrieverSection : ConfigurationSection 
{ 
    [ConfigurationProperty("feeds", IsDefaultCollection = 
    public FeedElementCollection Feeds 
    { 
     get { return (FeedElementCollection)this["feeds"]; } 
     set { this["feeds"] = value; } 
    } 
} 

我看到如何通過它使用迭代一個「每個「基於_Config的這一聲明:

public static FeedRetrieverSection _Config = 
     ConfigurationManager.GetSection("feedRetriever") as FeedRetrieverSection; 

我無法弄清楚的是:如何在集合中搜索給定的名稱?

使用_Config的聲明,如上所示,我想要使用linq或字典從這個列表中獲取單個「記錄」<feeds>

完整的堆棧:

Web配置有這個在它:

<feedRetriever> 
    <feeds> 
     <add name="Nettuts+" url="http://feeds.feedburner.com/nettuts" cache="false"/> 
     <add name="Jeremy McPeak" url="http://www.wdonline.com/feeds/blog/rss/" /> 
     <add name="Nicholas C. Zakas" url="http://feeds.nczonline.net/blog/" /> 
    </feeds> 
</feedRetriever> 

這是在代碼中這樣表示:

public class FeedElement : ConfigurationElement 
{ 
    [ConfigurationProperty("name", IsKey = true, IsRequired = true)] 
    public string Name 
    { 
     get { return (string)this["name"]; } 
     set { this["name"] = value; } 
    } 

    // etc for all of the elements... 
} 

這是包裹在ConfigurationElementCollection中像這樣:

[ConfigurationCollection(typeof(FeedElement))] 
public class FeedElementCollection : ConfigurationElementCollection 
{ 
    protected override ConfigurationElement CreateNewElement() 
    { 
     return new FeedElement(); 
    } 

    protected override object GetElementKey(ConfigurationElement element) 
    { 
     return ((FeedElement)element).Name; 
    } 
} 
+0

可能重複http://stackoverflow.com/questions/9251544/how-do-i-make-a-收藏 - 快速搜索) – svick 2012-02-12 21:41:25

+0

如果您有更多的問題的細節,你應該編輯舊的,而不是發佈一個新的。 – svick 2012-02-12 21:41:53

+0

編輯您的原始問題在http://stackoverflow.com/questions/9251544/how-do-i-make-a-collection-fast-searchable不重複。 – 2012-02-12 21:43:16

回答

2

FeedElementCollection是一個非泛型集合,它將包含FeedElement s。要使用LINQ,您需要使用OfType<>Cast<>方法使其成爲「通用」。然後,你可以做過濾:

_Config.Feeds.OfType<FeedElement>().Where(e => e.Name == "Jeremy McPeak"); 
的[?我如何做一個集合快速搜索(