2012-02-12 4 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- collection-fast-searchable) – svick

+0

Если у вас есть более подробная информация по вопросу, вы должны отредактировать старый, а не опубликовать новый. – svick

+0

Редактировать исходный вопрос по адресу http://stackoverflow.com/questions/9251544/how-do-i-make-a-collection-fast-searchable не дублировать. –

ответ

2

FeedElementCollection - это не общая коллекция, которая будет содержать FeedElement s. Чтобы использовать LINQ на нем, вам нужно сделать его «общим» с помощью методов OfType<> или Cast<>. Затем вы можете сделать фильтрацию:

_Config.Feeds.OfType<FeedElement>().Where(e => e.Name == "Jeremy McPeak"); 
Смежные вопросы